【k8s】使用k8s部署一個簡單的nginx服務


名詞解釋

Namespace 表示命名空間

Deployment 表示pod發布

Service 表示多個pod做為一組的集合對外通過服務的表示

kubectl 是k8s的命令行操作命令,可以創建和更新,刪除,列表和查詳情等一系列的操作

 

部署步驟

 

 

 

同樣的方法將deployment改成service,可以實現對service的增刪該查等操作。 

一、創建命名空間namespace

1. 創建命名空間的yaml文件 nginx-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: nginx
  labels:
    name: nginx

配置說明:

kind:Namespace 表示yaml文件創建的是命名空間

metadata表示命名空間的元信息

metadata.name 是命名空間的名稱 取值nginx

metadata.labels 是命名空間的標簽 name=nginx

 

2. 創建命名空間nginx

kubectl create -f nginx-namespace.yaml

3. 查詢命名空間

# 查詢所有命名空間,可以看到新創建的命名空間nginx
➜  kube kubectl get namespaces
NAME              STATUS   AGE
default           Active   85d
kube-node-lease   Active   85d
kube-public       Active   85d
kube-system       Active   85d
nginx             Active   8d

4. 查詢命名空間nginx詳情

➜  kube kubectl describe namespace nginx
Name:         nginx
Labels:       name=nginx
Annotations:  <none>
Status:       Active

總結:

從命名空間詳情中可以看到如下信息

命名空間名稱: nginx

命名空間的標簽:name=nginx

命名空間狀態:Active 表示命名空間活躍

二、創建nginx的發布Deployment

 1. 創建deployment的yaml文件 nginx-deployment.yaml

➜  kube cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment1
  namespace: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.0
        ports:
        - containerPort: 80
        name: nginx
        volumeMounts:
        - name: conf
          mountPath: /etc/nginx/nginx.conf
        - name: log
          mountPath: /var/log/nginx
        - name: html
          mountPath: /etc/nginx/html
      tolerations:
      - key: "key"
        operator: "Equal"
        value: "nginx"
        effect: "NoSchedule"
      volumes:
      - name: conf
        hostPath:
          path: /Users/w/kube/nginx/conf/nginx.conf
      - name: log
        hostPath:
          path: /Users/w/kube/nginx/logs
          type: Directory
      - name: html
        hostPath:
          path: /Users/w/kube/nginx/html
          type: Directory

配置說明:

kind: Deployment表示yaml文件創建的是一個Deployment發布

metadata表示這個deployment的元信息

metadata.name 是deployment的名稱 nginx-deployment1

metadata.labels 是deployment的標簽 即:app=nginx

metadata.namespace  是deployment的命名空間,此處選擇的是第一步創建的命名空間nginx

 

spec: 表示deployment的詳細參數配置說明

spec.replicas 是啟動幾個pod節點

spec.template.spec 是deployment選擇模塊的詳細說明

spec.template.spec.containers 表示選擇的容器是什么,此處是nginx的docker鏡像 nginx:1.14.0,容器的端口設置 containerPort: 80, volumeMounts表示綁定的文件和目錄

 

spec.template.spec.volumes 表示選擇的容器掛載的宿主機的文件和目錄 conf, log和html

 

2. 創建deployment的nginx

kubectl create -f nginx-deployment.yaml

3. 查詢nginx命名空間下的pods

# ➜  kube kubectl get pods -n nginx
NAME                                 READY   STATUS    RESTARTS   AGE
nginx-deployment1-6cb86fb6b7-kkpbw   1/1     Running   5          7d20h

可以看到有一個nginx-deployment的pods, 啟動了1個pods運行Running狀態

可以通過修改如上yaml文件的spec.replicas啟動多個pods,

增加pods節點從1個到3個如下

spec.replicas: 3

# ➜  kube kubectl get pods -n nginx
NAME                                 READY   STATUS              RESTARTS   AGE
nginx-deployment1-6cb86fb6b7-kkpbw   1/1     Running             5          7d20h
nginx-deployment1-6cb86fb6b7-txkkj   0/1     ContainerCreating   0          1s
nginx-deployment1-6cb86fb6b7-ztt2t   0/1     ContainerCreating   0          1s

如上可以看到有兩個新的pod處於容器創建中狀態,容器創建成功后,狀態會轉移到Running,READY也會變成1/1

 

減少pods節點從3個到1個如下

# ➜  kube kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment1 configured
# ➜  kube kubectl get pods -n nginx
NAME                                 READY   STATUS        RESTARTS   AGE
nginx-deployment1-6cb86fb6b7-d6z6l   1/1     Terminating   0          98s
nginx-deployment1-6cb86fb6b7-kkpbw   1/1     Running       5          7d20h
nginx-deployment1-6cb86fb6b7-qtx2v   1/1     Terminating   0          98s

如上所示,有兩個pod狀態是終止中,只剩余一個處於Running狀態

 

4. 查詢命名空間nginx下的發布deployment

# ➜  kube kubectl describe deployment nginx -n nginx
Name:                   nginx-deployment1
Namespace:              nginx
CreationTimestamp:      Thu, 30 Sep 2021 11:46:53 +0800
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=nginx
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
# ...

可以看到pods節點是1個。

 

5. 查詢命名空間nginx下的發布pod詳情

# ➜  kube kubectl describe pod nginx-deployment1-6cb86fb6b7-kkpbw -n nginx
Name:         nginx-deployment1-6cb86fb6b7-kkpbw
Namespace:    nginx
Priority:     0
Node:         docker-desktop/192.168.65.4
Start Time:   Thu, 30 Sep 2021 15:12:48 +0800
Labels:       app=nginx
              pod-template-hash=6cb86fb6b7
Annotations:  <none>
Status:       Running
IP:           10.1.0.170
# ...

 6. 刪除一個deployment的pod節點

# ➜  kube kubectl delete pod  nginx-deployment1-6cb86fb6b7-txkkj -n nginx
pod "nginx-deployment1-6cb86fb6b7-txkkj" deleted

 

三、創建nginx的服務Service

1. 創建service的yaml文件 nginx-service.yaml

# ➜  kube cat nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
   app: nginx
  name: nginx-deployment1
  namespace: nginx
spec:
  ports:
  - port: 9000
    name: nginx-service80
    protocol: TCP
    targetPort: 80
    nodePort: 31090
  selector:
    app: nginx
  type: NodePort

配置說明:

kind: Service表示yaml文件創建的是一個Service

metadata表示這個Service的元信息

metadata.name 是Service的名稱 nginx-deployment1

metadata.labels 是Service的標簽 即:app=nginx

metadata.namespace  是Service的命名空間,此處選擇的是第一步創建的命名空間nginx

 

sepc是Service的詳細配置說明

sepc.type 取值NodePort 表示這個Service的類型是一個節點端口轉發類型

sepc.selector 表示這個Service是將帶標簽的哪些pods做為一個集合對外通過服務

sepc.ports.port 是Service綁定的端口

sepc.ports.name: nginx-service80 表示Service服務的名稱
sepc.ports.protocol: TCP 表示Service轉發請求到容器的協議是TCP,我們部署的http的nginx服務,因此選擇協議為TCP
sepc.ports.targetPort: 80 表示Service轉發外部請求到容器的目標端口80,即deployment的pod容器對外開放的容器端口80
sepc.ports.nodePort: 31090 表示Service對外開放的節點端口

 

2. 創建一個服務

# ➜  kube kubectl create -f nginx-service.yaml
service/nginx-deployment1 created

 

即可以使用瀏覽器打開這個端口的頁面,如下

 

4. 查詢服務列表

# ➜  kube kubectl get services -n nginx
NAME                TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
nginx-deployment1   NodePort   10.96.92.3   <none>        9000:31090/TCP   34s

5. 查詢服務詳情

# ➜  kube kubectl describe service nginx-deployment1 -n nginx
Name:                     nginx-deployment1
Namespace:                nginx
Labels:                   app=nginx
Annotations:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP:                       10.96.92.3
LoadBalancer Ingress:     localhost
Port:                     nginx-service80  9000/TCP
TargetPort:               80/TCP
NodePort:                 nginx-service80  31090/TCP
Endpoints:                10.1.0.170:80,10.1.0.176:80,10.1.0.178:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

 

6. 刪除一個service服務

# ➜  kube kubectl delete services nginx-deployment1 -n nginx
service "nginx-deployment1" deleted

 

如上就是通過k8s簡單部署一個nginx服務的步驟

其中包括如下步驟

  • 命名空間的創建
  • 標簽的增加
  • deployment的pods發布,增加和減少pods的方法
  • 節點端口轉發的Service創建
  • 刪除一個服務
  • 刪除一個pod

 

done.

祝玩的開心~


免責聲明!

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



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