欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

K8S部署lnmp項目全過程

 更新時間:2024年07月30日 10:29:15   作者:跳躍音符#3712  
這篇文章主要介紹了K8S部署lnmp項目全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

LNMP為什么要遷移到k8s

將LNMP遷移到k8s架構(gòu)上會使得應(yīng)用的啟動、遷移、部署變得即簡單又安全。

不必?fù)?dān)心應(yīng)用遷移后工作出現(xiàn)問題,也不用擔(dān)心一臺服務(wù)器無法應(yīng)付突發(fā)的用戶量。

架構(gòu)設(shè)計

MySQL是一種有狀態(tài)服務(wù),MySQL在某些情況下如果發(fā)生故障性退出可能會出現(xiàn)服務(wù)無法再次啟動的情況,所以使用StorageClass(NFS)來掛載,并使用Deployments來保證應(yīng)用的持續(xù),這里設(shè)置replicas為1,后期部署主從后再行修改

PVC設(shè)置

[root@master lnmp]# kubectl create ns  lnmp 
namespace/lnmp created

[root@master lnmp]# cat  lnmp-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name:  mysql-pvc
  namespace: lnmp
spec:
  resources:
    requests:
      storage: 5Gi
  accessModes:
    - ReadWriteMany
  storageClassName: mysc1

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name:  php-pvc
  namespace: lnmp
spec:
  resources:
    requests:
      storage: 5Gi
  accessModes:
    - ReadWriteMany
  storageClassName: mysc1
  
[root@master lnmp]# kubectl apply -f lnmp-pvc.yaml 
persistentvolumeclaim/mysql created
persistentvolumeclaim/php created

### 已部署sc,這邊狀態(tài)已經(jīng)變更為 Bound

[root@master lnmp]# kubectl get pvc -n lnmp 
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-pvc   Bound    pvc-bb57ddc7-ae5e-4652-880a-08d8260314bb   5Gi        RWX            mysc1          29s
php-pvc     Bound    pvc-53c2880e-c383-41f1-8e09-c7106ea8c18f   5Gi        RWX            mysc1          29s

Mysql 配置

1. 創(chuàng)建mysql密碼的認(rèn)證 (secret)

[root@master lnmp]# kubectl create secret generic mysql-pass --from-literal=password=Aa123456 -n lnmp 
secret/mysql-pass created
# 或者
[root@master ~]# vim mysql-secret.yaml
apiVersion: v1
data:
  password: QWExMjM0NTY=
kind: Secret
metadata:
  creationTimestamp: null
  name: mysql-pass
  namespace: lnmp
  
[root@master ~]# kubectl apply -f mysql-secret.yaml 
secret/mysql-pass created

2. 創(chuàng)建mysql的Service、deployment

2.1 這邊使用了自建的harbor鏡像倉庫,配置dockerconfigjson類型的secret

kubectl create secret docker-registry  --dry-run=client  docker-harbor  --docker-server=registry.bianminchang.com:5001 --docker-username=admin --docker-password=li*****4   -o yaml > docker-secret.yaml

[root@master lnmp]# vim docker-secret.yaml 
apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyJyZWdpc3RyeS5iaWFubWluY2hhbmcuY29tOjUwMDEiOnsidXNlcm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoi************oiWVdSdGFXNDZiR2x3Y0dSd2NEUT0ifX19
kind: Secret
metadata:
  creationTimestamp: null
  name: docker-harbor
type: kubernetes.io/dockerconfigjson

[root@master lnmp]# kubectl apply -f docker-secret.yaml 
secret/docker-harbor created

2.2 mysql的Service、deployment

[root@master lnmp]# cat  mysql-deploy.yaml 
#apiVersion: v1                          # 這邊由于項目數(shù)據(jù)庫連接無法讀取集群內(nèi)的svc,使用服務(wù)器的hostPort
#kind: Service
#metadata:
#  name: lnmp-mysql
#  namespace: lnmp
#  labels:
#    app: lnmp-mysql
#spec:
#  type: 
#  ports:
#    - protocol: TCP
#      port: 3306
#      nodePort: 3306
#  selector:
#    app: lnmp-mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: lnmp-mysql
  namespace: lnmp
spec:
  selector:
    matchLabels:
      app: lnmp-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: lnmp-mysql
    spec:
      nodeName: master
      containers:
      - name: mysql
        image: registry.bianminchang.com:5001/lnmp/mysql:5.6
        imagePullPolicy: IfNotPresent
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports: 
        - containerPort: 3306
          hostPort: 3306             # 服務(wù)器3306 端口
          name: mysql
        livenessProbe:
          tcpSocket:
            port: 3306
          initialDelaySeconds: 90
          periodSeconds: 15 
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
        - name: etc-localtime
          mountPath: /etc/localtime
      imagePullSecrets:         # 指定鏡像倉庫拉取信息
      - name: docker-harbor
      volumes:
      - name: etc-localtime
        hostPath:
          path: /etc/localtime
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc

創(chuàng)建文件并檢測

[root@master lnmp]# kubectl apply -f mysql-deploy.yaml
service/lnmp-mysql created
deployment.apps/lnmp-mysql created
[root@master lnmp]# kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
default-token-2cqf5   kubernetes.io/service-account-token   3      54m
docker-harbor         kubernetes.io/dockerconfigjson        1      6m16s

[root@master lnmp]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
lnmp-mysql-5df7b46bcd-fk76k   1/1     Running   0          6m1s

PHP配置

創(chuàng)建php的service,hpa(水平自動伸縮),deployment

[root@master lnmp]# cat  php-deploy.yaml 
apiVersion: v1
kind: Service
metadata:
  name: lnmp-php
  namespace: lnmp
spec:
  ports:
  - port: 9000
  selector:
    app: lnmp-php
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: lnmp-php
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: lnmp-php
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 85      # 當(dāng)容器的CPU使用量超過85%時,調(diào)度器創(chuàng)建新的pod
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: lnmp-php
  namespace: lnmp
  labels:
    app: php
spec:
  replicas: 1
  selector:
    matchLabels:
      app: lnmp-php
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: lnmp-php
    spec:
      containers:
      - name: php
        image: registry.bianminchang.com:5001/lnmp/php-fpm:7.0.4
        #image: php:test
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9000
          name: php
        volumeMounts:
        - name: php-persistent-storage
          mountPath: /usr/share/nginx/html
        - name: etc-localtime
          mountPath: /etc/localtime 
      imagePullSecrets:         # 指定鏡像倉庫拉取信息
      - name: docker-harbor
      volumes:
      - name: etc-localtime            # docker 時區(qū)掛載
        hostPath:
          path: /etc/localtime
      - name: php-persistent-storage
        persistentVolumeClaim:
          claimName: php-pvc

[root@master lnmp]# kubectl apply -f php-deploy.yaml 
service/lnmp-php unchanged
horizontalpodautoscaler.autoscaling/lnmp-php created
deployment.apps/lnmp-php unchanged

[root@master lnmp]# kubectl get hpa
NAME       REFERENCE             TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
lnmp-php   Deployment/lnmp-php   <unknown>/85%   1         10        3          17s

Nginx配置

創(chuàng)建nginx的configmap,service,deployment

api deployment

[root@master nginx]#  vim api-deploy.yaml
# HPA Pod 水平自動擴(kuò)縮
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
  namespace: lnmp
spec:
  maxReplicas: 5
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api
  targetCPUUtilizationPercentage: 80

---
apiVersion: v1
kind: Service
metadata:
  name: api
  namespace: lnmp
  labels:
    app: nginx
spec:
  ports:
  - name: nginx
    port: 80
    targetPort: 80
  selector:
    app: api
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
      - name: nginx
        image: registry.bianminchang.com:5001/lnmp/nginx:1.16.1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: nginx
        livenessProbe:
            httpGet:
                path: /
                port: 80
            initialDelaySeconds: 20
            periodSeconds: 10
        volumeMounts:
        - name: nginx-persistent-storage
          mountPath: /usr/share/nginx/html
        - name: factory-api-config
          mountPath: /etc/nginx/conf.d/default.conf
          subPath: default.conf
      volumes:
      - name: nginx-persistent-storage
        persistentVolumeClaim:
          claimName: php-pvc
      - name: factory-api-config
        configMap:
          name: factory-api-config

factory deployment 項目后臺

[root@master nginx]# cat factory-deploy.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: factory-hpa
  namespace: lnmp
spec:
  maxReplicas: 5
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: factory
  targetCPUUtilizationPercentage: 80

---
apiVersion: v1
kind: Service
metadata:
  name: factory
  namespace: lnmp
  labels:
    app: nginx
spec:
  ports:
  - name: nginx
    port: 80
    targetPort: 80
  selector:
    app: factory
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: factory
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: factory
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: factory
    spec:
      containers:
      - name: nginx
        image: registry.bianminchang.com:5001/lnmp/nginx:1.16.1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: nginx
        livenessProbe:
            httpGet:
                path: /
                port: 80
            initialDelaySeconds: 20
            periodSeconds: 10
        volumeMounts:
        - name: nginx-persistent-storage
          mountPath: /usr/share/nginx/html
        - name: factory-config
          mountPath: /etc/nginx/conf.d/default.conf
          subPath: default.conf
      volumes:
      - name: nginx-persistent-storage
        persistentVolumeClaim:
          claimName: php-pvc
      - name: factory-config
        configMap:
          name: factory-config

factory-front. deployment. 項目前端

[root@master nginx]# cat  factory-front-deploy.yaml 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
  namespace: lnmp
spec:
  maxReplicas: 5
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: factory-front
  targetCPUUtilizationPercentage: 80

---
apiVersion: v1
kind: Service
metadata:
  name: factory-front
  namespace: lnmp
  labels:
    app: nginx
spec:
  ports:
  - name: nginx
    port: 80
    targetPort: 80
  selector:
    app: factory-front
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: factory-front
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: factory-front
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: factory-front
    spec:
      containers:
      - name: nginx
        image: registry.bianminchang.com:5001/lnmp/nginx:1.16.1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: nginx
        livenessProbe:
            httpGet:
                path: /
                port: 80
            initialDelaySeconds: 20
            periodSeconds: 10
        volumeMounts:
        - name: nginx-persistent-storage
          mountPath: /usr/share/nginx/html
        - name: factory-front-config
          mountPath: /etc/nginx/conf.d/default.conf
          subPath: default.conf
      volumes:
      - name: nginx-persistent-storage
        persistentVolumeClaim:
          claimName: php-pvc
      - name: factory-front-config
        configMap:
          name: factory-front-config

nginx 配置

注意:

php與nginx不在同一個pod內(nèi),集群內(nèi)通訊用svc, fastcgi_pass lnmp-php:9000;

lnmp-php 為php的svc

[root@master nginx]# cat factory-config.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-wp-config
  namespace: lnmp
data:
  default.conf: |-
    server {
        listen 80;
        server_name localhost;
        root /usr/share/nginx/html;
        index index.html index.php;

        location ~ \.php$ {
            root /usr/local/nginx/html;
            fastcgi_pass lnmp-php:9000;
            fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_connect_timeout 60s;
            fastcgi_read_timeout 300s;
            fastcgi_send_timeout 300s;
        }
    }
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: factory-config
  namespace: lnmp
data:
  default.conf: |-
    server {
        listen 80;
        server_name localhost;
        root /usr/share/nginx/html/jingtai_factory/backend/web;
        index index.php index.html index.htm default.php default.htm default.html;

        location ~ \.php$ {
            root /usr/share/nginx/html/jingtai_factory/backend/web;
            fastcgi_pass lnmp-php:9000;
            fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/jingtai_factory/backend/web$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_connect_timeout 60s;
            fastcgi_read_timeout 300s;
            fastcgi_send_timeout 300s;
        }
        location /    {
                if (!-e $request_filename) {
                rewrite ^/(.*) /index.php last;
                break;
                }
        }
        access_log  /usr/share/nginx/html/factory.log;
        error_log  /usr/share/nginx/html/factory-err.log;
    }
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: factory-front-config
  namespace: lnmp
data:
  default.conf: |-
    server {
        listen 80;
        server_name localhost;
        root /usr/share/nginx/html/jingtai_factory_frontend;
        index index.php index.html index.htm default.php default.htm default.html;

        location ~ \.php$ {
            root /usr/share/nginx/html/jingtai_factory_frontend;
            fastcgi_pass lnmp-php:9000;
            fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/jingtai_factory_frontend$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_connect_timeout 60s;
            fastcgi_read_timeout 300s;
            fastcgi_send_timeout 300s;
        }
        location /    {
                if (!-e $request_filename) {
                rewrite ^/(.*) /index.html last;
                break;
        }
    }
    }
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: factory-api-config
  namespace: lnmp
data:
  default.conf: |-
    server {
        listen 80;
        server_name localhost;
        root /usr/share/nginx/html/jingtai_factory/cloud;
        index index.php index.html index.htm default.php default.htm default.html;

        location ~ \.php$ {
            root /usr/share/nginx/html/jingtai_factory/cloud;
            fastcgi_pass lnmp-php:9000;
            fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/jingtai_factory/cloud$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_connect_timeout 60s;
            fastcgi_read_timeout 300s;
            fastcgi_send_timeout 300s;
        }
        location /    {
                if (!-e $request_filename) {
                rewrite ^/(.*) /index.html last;
                break;
        }
    }
}

執(zhí)行結(jié)果

[root@master nginx]# kubectl get pod
NAME                             READY   STATUS    RESTARTS   AGE
api-59c5b5ddbc-nbcb9             1/1     Running   0          16h
factory-574c54f796-qzfnw         1/1     Running   0          16h
factory-front-694779bbd8-55tgc   1/1     Running   0          16h
lnmp-mysql-57445b5c4b-mpl62      1/1     Running   0          16h
lnmp-php-5d7d5896b7-9sqtb        1/1     Running   0          16h

Ingress配置

[root@master ingress]# cat ingress-lnmp.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: lnmp-ingress
  namespace: lnmp
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: backend.k8s.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: factory
            port:
              number: 80
  - host: api.k8s.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: api
            port:
              number: 80
  - host: factory.k8s.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: factory-front
            port:
              number: 80

[root@master ingress]# kubectl get ingress
NAME           CLASS   HOSTS                                         ADDRESS         PORTS   AGE
lnmp-ingress   nginx   backend.k8s.com,api.k8s.com,factory.k8s.com   10.99.132.137   80      16h

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 從小飯館客流量變大論云原生負(fù)載均衡

    從小飯館客流量變大論云原生負(fù)載均衡

    這篇文章主要為大家介紹了從小飯館客流量變大來討論云原生負(fù)載均衡,為大家做出更生動易懂的云原生解釋說明有需要的朋友可以借鑒參考下
    2022-03-03
  • k8s編排之StatefulSet知識點詳解一

    k8s編排之StatefulSet知識點詳解一

    這篇文章主要為大家介紹了k8s編排之StatefulSet知識點的部分詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 刪除Helm使用時關(guān)于kubernetes文件的警告問題

    刪除Helm使用時關(guān)于kubernetes文件的警告問題

    這篇文章主要介紹了刪除Helm使用時關(guān)于kubernetes文件的警告問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 一文搞懂K8S中的NodeSelector

    一文搞懂K8S中的NodeSelector

    NodeSelector是Kubernetes用于指定Pod運行節(jié)點的機制,通過節(jié)點上的標(biāo)簽(label)來選擇性地調(diào)度Pod,增加調(diào)度的靈活性和精確性,首先需要給節(jié)點打上標(biāo)簽,本文給大家介紹K8S中的NodeSelector,感興趣的朋友一起看看吧
    2024-10-10
  • K8S內(nèi)部pod之間相互調(diào)用案例以及詳解

    K8S內(nèi)部pod之間相互調(diào)用案例以及詳解

    這篇文章主要給大家介紹了關(guān)于K8S內(nèi)部pod之間相互調(diào)用案例的相關(guān)資料,Pod是Kubernetes中最小的可部署單元,它是一個或多個容器的集合,它們共享網(wǎng)絡(luò)和存儲資源,并在同一節(jié)點上運行,需要的朋友可以參考下
    2023-08-08
  • kubernetes-1.25.6二進(jìn)制部署方式

    kubernetes-1.25.6二進(jìn)制部署方式

    這篇文章主要介紹了kubernetes-1.25.6二進(jìn)制部署方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • ES業(yè)務(wù)數(shù)據(jù)遷移遇到的精度問題BUG

    ES業(yè)務(wù)數(shù)據(jù)遷移遇到的精度問題BUG

    這篇文章主要為大家介紹了ES業(yè)務(wù)數(shù)據(jù)遷移遇到的BUG精度問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • windows下搭建Consul集群

    windows下搭建Consul集群

    這篇文章介紹了windows下搭建Consul集群的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 在CentOS上如何安裝Singularity高性能容器

    在CentOS上如何安裝Singularity高性能容器

    Singularity是勞倫斯伯克利國家實驗室專門為大規(guī)模、跨節(jié)點HPC和DL工作負(fù)載而開發(fā)的容器化技術(shù),具備輕量級、快速部署、方便遷移等優(yōu)勢,且支持從Docker鏡像格式轉(zhuǎn)換為Singularity鏡像格式,本文給大家介紹在CentOS上如何安裝Singularity高性能容器,感興趣的朋友一起看看吧
    2024-05-05
  • 在AWS-EC2中安裝Minikube集群的詳細(xì)過程

    在AWS-EC2中安裝Minikube集群的詳細(xì)過程

    這篇文章主要介紹了在AWS-EC2中安裝Minikube集群,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論