Kubernetes之使用Kubernetes部署Nginx服務


  使用k8s部署Nginx服務,Nginx對外提供服務只希望部署在其中一台主機,該主機不提供其他服務

  一.設置標簽及污點

  為了保證nginx之能分配到nginx服務器需要設置標簽和污點,設置標簽可以讓Pod選擇該服務器部署,設置污點可以使其他服務Pod無法部署在該服務器

  本次部署nginx服務器IP為192.168.1.232

  設置標簽

#設置標簽 key為typevalue為nginx
kubectl label node 192.168.1.232  type=nginx
#查看標簽
kubectl get node 192.168.1.232 --show-labels
NAME            STATUS   ROLES    AGE   VERSION   LABELS
192.168.1.232   Ready    <none>   30h   v1.17.4   kubernetes.io/arch=amd64,kubernetes.io/hostname=192.168.1.232,kubernetes.io/os=linux,type=nginx

   設置污點

#給node192.168.1.232設置污點key為key值為nginx effec為NoSchedule永不調度
#除非在Pod里設置了對應的tolerations參數
kubectl taint node 192.168.1.232 key=nginx:NoSchedule

   查看污點

kubectl describe node 192.168.1.232

   

 

 

  二.設置Nginx-deployment的yaml文件

# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.0
        name: nginx
      #標簽選擇器
      nodeSelector:
        type: nginx
      #設置污點可以調度到對應服務器
      tolerations:
      - key: "key"
        operator: "Equal"
        value: "nginx"
        effect: "NoSchedule"

   應用啟動

 kubectl apply -f nginx-deployment.yaml 

   查看已經調度到對應的服務器

# kubectl get pod -o wide
NAME                                    READY   STATUS    RESTARTS   AGE     IP            NODE            NOMINATED NODE   READINESS GATES
nginx-deployment-57f94c46b4-5whb5       1/1     Running   0          6h30m   172.17.97.3   192.168.1.232   <none>           <none>

   三.設置Nginx配置文件和程序根目錄掛載

  啟動的Nginx使用默認的配置文件和默認的網站根目錄,需要使用volume掛載

# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.0
        name: nginx
        volumeMounts:
        - name: conf
          mountPath: /etc/nginx
        - name: opt
          mountPath: /opt
      #標簽選擇器
      nodeSelector:
        type: nginx
      #設置污點可以調度到對應服務器
      tolerations:
      - key: "key"
        operator: "Equal"
        value: "nginx"
        effect: "NoSchedule"
      volumes:
      - name: conf
        hostPath:
          path: /etc/nginx
          type: Directory
      - name: opt
        hostPath:
          path: /opt
          type: Directory

   本次使用了本機掛載hostPath掛載配置文件及根目錄,生產環境最好使用pvc掛載

  四.設置Service對外提供服務

# cat nginx-service.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  ports:
  - port: 80
    name: nginx-service80
    protocol: TCP
    targetPort: 80
    nodePort: 80   
  - port: 81
    name: nginx-service81
    protocol: TCP
    targetPort: 81
    nodePort: 81 
  selector:
    app: nginx
  type: NodePort

   PS:使用NodePort啟用端口對外提供服務,如果對外映射多個端口需要在port參數下加參數name定義名稱,單個端口無需設置參數name

          k8s默認使用NodePort對外映射端口為30000-50000如需要映射其他端口需要修改配置文件/opt/kubernetes/cfg/kube-apiserver,修改端口范圍

 

 

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM