kubernetes-deployment運用部署


kubernetes-deployment運用部署

deployment

         Deployment是新一代用於Pod管理的對象,與Replication Controller相比,它提供了更加完善的功能,使用起來更加簡單方便。

      kubernetes開發了deployment,replicaset、daemonset、statefuleset、job等多種controller。

查看狀態

[root@master ~]# kubectl describe deployments.apps nginx-deployment
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Tue, 14 Jul 2020 14:56:39 +0800
Labels:                 run=nginx-deployment
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=nginx-deployment
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=nginx-deployment
  Containers:
   nginx-deployment:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-6c94df7599 (2/2 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  2m15s  deployment-controller  Scaled up replica set nginx-deployment-6c94df7599 to 2

查看詳細信息

[root@master ~]# kubectl describe replicasets.apps nginx-deployment-6c94df7599
Name:           nginx-deployment-6c94df7599
Namespace:      default
Selector:       pod-template-hash=6c94df7599,run=nginx-deployment
Labels:         pod-template-hash=6c94df7599
                run=nginx-deployment
Annotations:    deployment.kubernetes.io/desired-replicas: 2
                deployment.kubernetes.io/max-replicas: 3
                deployment.kubernetes.io/revision: 1
Controlled By:  Deployment/nginx-deployment
Replicas:       2 current / 2 desired
Pods Status:    2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  pod-template-hash=6c94df7599
           run=nginx-deployment
  Containers:
   nginx-deployment:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  5m1s  replicaset-controller  Created pod: nginx-deployment-6c94df7599-bm8pd
  Normal  SuccessfulCreate  5m1s  replicaset-controller  Created pod: nginx-deployment-6c94df7599-pwpph

查看更加詳細的信息

[root@master ~]# kubectl describe pod nginx-deployment-6c94df7599-bm8pd
Name:         nginx-deployment-6c94df7599-bm8pd
Namespace:    default
Priority:     0
Node:         node2/192.168.172.136
Start Time:   Tue, 14 Jul 2020 14:57:00 +0800
Labels:       pod-template-hash=6c94df7599
              run=nginx-deployment
Annotations:  <none>
Status:       Running
IP:           10.244.2.7
IPs:
  IP:           10.244.2.7
Controlled By:  ReplicaSet/nginx-deployment-6c94df7599
Containers:
  nginx-deployment:
    Container ID:   docker://eb72829dc2fcf1631469f33248c9fc861e0c9093c4142cb2c8e340b3612d7887
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:a93c8a0b0974c967aebe868a186e5c205f4d3bcb5423a56559f2f9599074bbcd
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Tue, 14 Jul 2020 14:57:17 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-ptz8b (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-ptz8b:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-ptz8b
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  7m20s  default-scheduler  Successfully assigned default/nginx-deployment-6c94df7599-bm8pd to node2
  Normal  Pulling    7m19s  kubelet, node2     Pulling image "nginx"
  Normal  Pulled     7m2s   kubelet, node2     Successfully pulled image "nginx"
  Normal  Created    7m2s   kubelet, node2     Created container nginx-deployment
  Normal  Started    7m2s   kubelet, node2     Started container nginx-deployment

events記錄了pod的啟動過程,如果操作失敗,也能在這里查看到原因;

過程:

 1.用戶通過kubectl創建deployment。

 2.deployment創建replicaset。

 3.replicaset創建pod。

k8s創建資源的兩種方式:

1.直接用命令創建。

2.通過配置文件和kubectl apply創建,要完成前面同樣的工作,可以執行命令。

兩種方式的區別

基於命令的方式:

1.簡單直觀快捷,上手快。

2.適合臨時測試和實驗

基於配置文件方式:

1.配置文件描述了what,即應用最終要達到的狀態。

2.配置文件提供了創建資源的模板,能夠重復部署。

3.可以像管理代碼一樣管理部署。

4.適合正式的、跨環境的、規模化部署。

5.這種方式要求熟悉配置文件的語法、有一定難度。
以下為兩種方式:

1.命令

[root@master ~]# kubectl create deployment test --image=nginx --dry-run -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: test
  name: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}
kubectl   create   deployment test --image=nginx  --dry-run  -o  yaml  > nginx1.yml            ##配置文件內容較多 語句也比較多 也可以用這個方式獲得模板
創鍵一個deployment 名字叫dis 鏡像是nginx 現在不執行 保存的格式為yaml
保存到nginx.yml這個文件里

2.配置文件:

[root@master ~]# cat nginx1.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test
  name: test
spec:
  replicas: 2        ##收縮副本的話,調整這里就可以了,然后重新執行kubectl apply -f nginx1.yml
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test
    spec:
      containers:
      - image: nginx
        name: nginx

[root@master ~]# kubectl apply -f nginx1.yml
deployment.apps/test created

 
        

查看

[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
caoyi-c6c994756-jz2mw               1/1     Running   1          45h    10.244.1.7    node1   <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running   1          45h    10.244.2.6    node2   <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running   0          60m    10.244.2.7    node2   <none>           <none>
nginx-deployment-6c94df7599-pwpph   1/1     Running   0          60m    10.244.1.9    node1   <none>           <none>
test-57d9864f4f-k62hd               1/1     Running   0          5m8s   10.244.1.10   node1   <none>           <none>
test-57d9864f4f-pt7g9               1/1     Running   0          5m8s   10.244.2.8    node2   <none>           <none>

 

 出於安全考慮,默認配置下kubernetes不會pod調度到master節點,如果希望master也當做node節點使用、

執行

kubectl taint node master  node-role.kubernetes.io/master-

恢復master不充作節點,執行如下命令:

kubectl taint node master  node-role.kubernetes.io/master="":NoSchedule

K8s的故障轉移:

關掉node1

查看
[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS        RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
caoyi-c6c994756-jz2mw               1/1     Terminating   1          46h   10.244.1.7    node1   <none>           <none>
caoyi-c6c994756-q4r44               1/1     Running       0          12m   10.244.2.12   node2   <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running       1          46h   10.244.2.6    node2   <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running       0          89m   10.244.2.7    node2   <none>           <none>
nginx-deployment-6c94df7599-pwpph   1/1     Terminating   0          89m   10.244.1.9    node1   <none>           <none>
nginx-deployment-6c94df7599-s68fl   1/1     Running       0          12m   10.244.2.9    node2   <none>           <none>
test-57d9864f4f-c8nxl               1/1     Running       0          12m   10.244.2.11   node2   <none>           <none>
test-57d9864f4f-k62hd               1/1     Terminating   0          34m   10.244.1.10   node1   <none>           <none>
test-57d9864f4f-pt7g9               1/1     Running       0          34m   10.244.2.8    node2   <none>           <none>

再開啟node1

[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
caoyi-c6c994756-q4r44               1/1     Running   0          18m   10.244.2.12   node2   <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running   1          46h   10.244.2.6    node2   <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running   0          95m   10.244.2.7    node2   <none>           <none>
nginx-deployment-6c94df7599-s68fl   1/1     Running   0          18m   10.244.2.9    node2   <none>           <none>
test-57d9864f4f-c8nxl               1/1     Running   0          18m   10.244.2.11   node2   <none>           <none>
test-57d9864f4f-pt7g9               1/1     Running   0          40m   10.244.2.8    node2   <none>           <none>

可以看到node1的節點的pod已經停止了
當node1再次上線后停掉的pod會被刪除,不會再次回到node1上了

用標簽控制pod所在的節點:

添加標簽:

[root@master ~]# kubectl label nodes  node1   test=caoyi
node/node1 labeled

查看:

[root@master ~]# kubectl get   nodes  --show-labels 
NAME     STATUS   ROLES    AGE     VERSION   LABELS
master   Ready    master   4d22h   v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1    Ready    <none>   4d22h   v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,test=caoyi
node2    Ready    <none>   4d22h   v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux

將標簽添加到nginx1.yml文件里控制pod所在節點:

[root@master ~]# cat nginx1.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test
  name: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test
    spec:
      containers:
      - image: nginx
        name: nginx
      nodeSelector:
        test: caoyi
[root@master ~]# kubectl  apply -f  nginx1.yml
deployment.apps/test configured

查看pod所在節點 是否所有pod在node1上:

[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
caoyi-c6c994756-q4r44               1/1     Running   0          26m    10.244.2.12   node2   <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running   1          46h    10.244.2.6    node2   <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running   0          104m   10.244.2.7    node2   <none>           <none>
nginx-deployment-6c94df7599-s68fl   1/1     Running   0          26m    10.244.2.9    node2   <none>           <none>
test-6f9575d5ff-c2bp7               1/1     Running   0          21s    10.244.1.12   node1   <none>           <none>
test-6f9575d5ff-gplfk               1/1     Running   0          41s    10.244.1.11   node1   <none>           <none>

把nginx1.yml里指定標簽的語句去掉pod就會在node1和node2上了

[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
caoyi-c6c994756-q4r44               1/1     Running   0          34m     10.244.2.12   node2    <none>           <none>
caoyi-c6c994756-t24n5               1/1     Running   1          46h     10.244.2.6    node2    <none>           <none>
nginx-deployment-6c94df7599-bm8pd   1/1     Running   0          112m    10.244.2.7    node2    <none>           <none>
nginx-deployment-6c94df7599-s68fl   1/1     Running   0          34m     10.244.2.9    node2    <none>           <none>
test-57d9864f4f-776c5               1/1     Running   0          17s     10.244.2.13   node2    <none>           <none>
test-57d9864f4f-gf97m               1/1     Running   0          5m35s   10.244.0.5    master   <none>           <none>
test-57d9864f4f-l2jzm               1/1     Running   0          5m52s   10.244.1.13   node1    <none>           <none>

 


免責聲明!

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



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