主頁 > 軟體設計 > linux12k8s --> 04命令列優化、Pod介紹、label標簽、控制器

linux12k8s --> 04命令列優化、Pod介紹、label標簽、控制器

2021-07-28 07:28:25 軟體設計

文章目錄

      • 一、優化命令列
      • 二、kubernetes帶來的變革
        • 1.對于開發人員
      • 2.對于運維人員
      • 3.Pod
        • 1>Pod生命周期
        • 2>Pod是如何管理多個容器的
        • 3>Pod中資料持久性
        • 4>Pod的狀態
        • 5>Pod的資源清單詳解
        • 6>Pod的重啟策略
      • 三、名詞介紹
        • 1.k8s中的名稱空間
        • 2、namespace
      • 3、Label標簽
      • 3.k8s中常用命令
      • 4.控制器
        • 1)deployment(部署長期運行、無狀態應用)
          • 1>彈性擴容的3種方法
          • 2>更新(首先要存在低版本才可以更新)
          • 3>回滾
        • 2)DaemonSet(一般用來監控、收集日志)
        • 3)擴展

一、優化命令列

yum install -y -completion
source /usr/share/-completion/_completion
source <(kubectl completion )
echo "source <(kubectl completion )" >> ~/.rc

二、kubernetes帶來的變革

k8s與docker的關系:
k8s是一個容器化管理平臺,docker是容器

1.對于開發人員

由于公司業務多,開發環境、測驗環境、預生產環境和生產環境都是隔離的,而且除了生產環境,為了節省成本,其他環境可能是沒有日志收集的,在沒有用 k8s 的時候,查看線下測驗的日志,需要開發或者測驗人員,找到對應的機器,在找到對應的容器,然后才能查看日志,在用了 k8s 之后,開發和測驗可以直接在 k8s 的dashboard 到對應的 namespace,即可定位到業務的容器,然后可以直接通過控制臺查看到對應的日志,大大降低了操作時間,
目前我們使用 jenkins、gitrunner 進行發版或者回滾等,從開發環境到測驗環境,到生產環境,完全遵守一次構建,多集群、多環境部署,通過不同的啟動引數、不同的環境變數、不同的組態檔實作區分不同的環境,目前已經實作 Python、Java、PHP、NodeJS、Go、.NET Core、Python等多種語言的一鍵式發版、一鍵式回滾,大大提高了開發人員的開發效率,

2.對于運維人員

如果你是一名運維人員,可能經常因為一些重復、繁瑣的作業感覺厭倦,比如:這個需要一套新的測驗環境,那個需要一套新的測驗環境,之前可能需要裝系統、裝依賴環境、開通權限等等,而如今,可以直接用鏡像直接部署一套新的測驗環境,甚至全程無需自己干預,開發人員通過 jenkins 或者自動化運維平臺即可一鍵式創建,大大降低了運維成本,
一開始,公司業務故障,可能是因為基礎環境不一致、依賴不一致、埠沖突等等問題,現在實作 Docker鏡像部署,k8s 編排,所有的依賴、基礎都是一樣的,并且環境的自動化擴容、健康檢查、容災、恢復都是全自動的,大大減少了因為這類基礎問題引發的故障,也有可能公司業務是由于服務器宕機、網路等問題,造成服務不可用,此類情況均需要運維人員及時去修復,而如今,可能在你收到告警資訊的時候,k8s 已經幫你恢復了,
在沒有使用 k8s 時,業務應用的擴容和縮容,都需要人工去處理,從采購服務器、上架、到部署依賴環境,不僅需要大量的人力物力,而且非常容易在中間程序出現問題,又要花費大量的時間去查找問題,成功上架后,還需要在前端反代端添加或該服務器,而如今,可以利用 k8s 的彈性計算,一鍵式進行擴容和縮容,不僅大大提高了運維效率,而且還節省了不少的服務器資源,提高了資源利用率,
 - 對于反代配置方面,比如可能你并不會,或者對 nginx 的配置規則并不熟悉,一些高級的功能你也不會實作,而如今,利用 k8s 的 ingress 即可簡單的實作那些復雜的邏輯,并且也不會在遇到 nginx 少加一個斜杠和多加一個斜杠的問題,
 - 對于負載均衡方面,之前負載均衡可能是 Nginx、LVS、HAProxy、F5 等,云上可能是云服務商提供的不在均衡機制,每次添加洗掉節點時,都需要手動去配置前端負載均衡,手動去匹配后端節點,而如今,使用 k8s內部的 service 可以動態發現實作自動管理節點,并且支持自動擴容縮容,之前遇到高峰流量時,經常服務器性能不夠,需要臨時加服務器面對高峰流量,而如今對于高性能 k8s 集群加上 serverless,基本實作無需管理,自動擴容,
 - 對于高可用方面,k8s 天生的高可用功能,徹底釋放了雙手,無需再去創建各類高可用工具、檢測檢查腳本,k8s 支持行程介面級別的健康檢查,如發現介面超時或者回傳值不正確,會自動處理該問題,
 - 對于中間件搭建方面,根據定義好的資源檔案,可以實作秒級搭建各類中間件高可用集群,并且支持一鍵式擴縮容,如 Redis、RabbitMQ、Zookeeper 等,并且大大減少了出錯的概率,
 - 對于應用埠方面,傳統行業中,一個服務器可能跑了很多行程,每個行程都有一個埠,需要人為的去配置埠,并且還需要考慮埠沖突的問題,如果有防火墻的話,還需要配置防火墻,在 k8s 中,埠統一管理統一配置,每個應用的埠都可設定成一樣的,之后通過 service 進行負載均衡,大大降低了埠管理的復雜度和埠沖突,

3.Pod

1、k8s集群中部署的最小單元,Pod最主要的功能管理是將一個業務或者一個呼叫鏈的所有服務(容器)

2、pod是k8s中最小部署單元,用來管理一個呼叫鏈的容器,它之中的主容器(pause)為整個呼叫鏈的容器提供基礎網路,共享存盤,監控業務容器的運行狀態,

Pod是在集群中運行部署應用或服務的最小單元,他是可以支持很多容器的,Pod的設計理念是支持多個容器在一個Pod中共享網路地址和檔案系統,可以通過行程間通信和檔案共享這種簡單高效的方式組合完成服務,

比如:你運行一個作業系統發行版的軟體倉庫,一個nginx容器用來發布軟體,另一個容器專門用來從源倉庫做同步,這兩個容器的鏡像不太可能是一個團隊開發的,但是他們一塊作業才能提供一個微服務,這種情況下,不同的團隊各自開發構建自己的容器鏡像,在部署的時候組合成一個微服務對外提供服務,這就是k8s中的Pod,

# 目前k8s中業務主要可以分為長期伺服型(long-running)、批處理型(batch)、節點后臺支撐型(node-daemon)和有狀態應用型(stateful application);分別對應的小機器人控制器為Deployment、Job、DaemonSet 和 StatefulSet,

1>Pod生命周期

2>Pod是如何管理多個容器的

Pod中可以同時運行多個行程(作為容器運行)協同作業,
同一個 Pod 中的容器會自動的分配到同一個 node上,同一個 Pod 中的容器共享資源、網路環境和依賴,所以它們總是被同時調度,在一個 Pod 中同時運行多個容器是一種比較高級的用法,只有當你的容器需要緊密配合協作的時候才考慮用這種模式,

3>Pod中資料持久性

Pod 在設計?持就不是作為持久化物體的,在調度失敗、節點故障、缺少資源或者節點維護的狀態下都會死
掉會被驅逐,通常,我們是需要借助類似于 Docker 存盤卷這樣的資源來做 Pod 的資料持久

4>Pod的狀態

 # 1、掛起(Pending):
 API Server 創建了 pod 資源物件已存入 etcd 中,但它尚未被調度完成,或者仍處于從倉庫下載鏡像的程序中,
 # 2、運行中(Running):
 Pod 已經被調度至某節點,并且所有容器都已經被 kubelet 創建完成
 # 3、成功(Succeeded):
 Pod 中的所有容器都已經成功終止并且不會被重啟,
 # 4、失敗(Failed):
 Pod 中的所有容器都已終止了,并且至少有一個容器是因為失敗終止,即容器以非 0 狀態退出或者被系統禁止,
 # 5、未知(Unknown):
 Api Server 無法正常獲取到 Pod 物件的狀態資訊,通常是由于無法與所在作業節點的kubelet 通信所致,
 # 6、ImgPullErr : 
 鏡像拉取失敗
 # 7、ContainerCreating :
 容器創建中

5>Pod的資源清單詳解

apiVersion:v1  #必選,指定K8s部署的API的版本號
kind:Pod   #必選,資源型別Pod
metadata: # 必選,記錄部署應用的元資料
  name: nginx # 必選,符合 RFC 1035 規范的 Pod 名稱
  namespace: web-testing # 可選,不指定默認為 default,Pod 所在的命名空間
  labels: # 可選,標簽選擇器,一般用于 Selector
    - app: nginx
  annotations: # 可選,注釋串列
    - app: nginx
spec: # 必選,用于部署容器的詳細資訊
  containers: # 必選,容器串列
  - name: nginx # 必選,符合 RFC 1035 規范的容器名稱
    image: nginx:v1 # 必選,容器所用的鏡像的地址
    imagePullPolicy: Always # 可選,鏡像拉取策略
    workingDir: /usr/share/nginx/html # 可選,容器的作業目錄
    volumeMounts: # 可選,存盤卷配置
    - name: webroot # 存盤卷名稱
      mountPath: /usr/share/nginx/html # 掛載目錄
      readOnly: true # 只讀
    ports: # 可選,容器需要暴露的埠號串列
    - name: http # 埠名稱
      containerPort: 80 # 埠號
      protocol: TCP # 埠協議,默認 TCP
    env: # 可選,環境變數配置
    - name: TZ # 變數名
      value: Asia/Shanghai
    - name: LANG
      value: en_US.utf8
    resources: # 可選,資源限制和資源請求限制
      limits: # 最大限制設定
        cpu: 1000m
        memory: 1024MiB
      requests: # 啟動所需的資源
        cpu: 100m
        memory: 512MiB
     readinessProbe: # 可選,容器狀態檢查
       httpGet: # 檢測方式
         path: / # 檢查路徑
         port: 80 # 監控埠
       timeoutSeconds: 2 # 超時時間
       initialDelaySeconds: 60 # 初始化時間
     livenessProbe: # 可選,監控狀態檢查
       exec: # 檢測方式
         command:
         - cat
         - /health
       httpGet: # 檢測方式
         path: /_health
         port: 8080
         httpHeaders:
         - name: end-user
           value: jason
        tcpSocket: # 檢測方式
          port: 80
        initialDelaySeconds: 60 # 初始化時間
        timeoutSeconds: 2 # 超時時間
        periodSeconds: 5 # 檢測間隔
        successThreshold: 2 # 檢查成功為 2 次表示就緒
        failureThreshold: 1 # 檢測失敗 1 次表示未就緒
      securityContext: # 可選,限制容器不可信的行為
        provoleged: false
     restartPolicy: Always # 可選,默認為 Always
     nodeSelector: # 可選,指定 Node 節點
       region: subnet7
     imagePullSecrets: # 可選,拉取鏡像使用的 secret
     - name: default-dockercfg-86258
     hostNetwork: false # 可選,是否為主機模式,如是,會占用主機埠
     volumes: # 共享存盤卷串列
     - name: webroot # 名稱,與上述對應
       emptyDir: {} # 共享卷型別,空
       hostPath: # 共享卷型別,本機目錄
         path: /etc/hosts
       secret: # 共享卷型別,secret 模式,一般用于密碼
         secretName: default-token-tf2jp # 名稱
         defaultMode: 420 # 權限
         configMap: # 一般用于組態檔
         name: nginx-conf
         defaultMode: 420
         
  ================================================================================================
 [root@k8s-m-01 ~]# kubectl explain pod.spec  #查看引數
 string : 跟字串
Object :
[]Object : 
	- name

案例:

# 實體1:部署nginx、tomcat容器

# kubectl explain Pod  #查apiVersion版本號 v1
[root@k8s-m-01 ~]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: nginx
      image: nginx
    - name: tomcat
      image: tomcat

# 實體2:部署wordpress
# 1、nginx  PHP  MySQL
# 2、 制作鏡像
# 3、創建nginx組態檔,然后構建鏡像
# 4、撰寫配置清單,部署
[root@k8s-m-01 ~]# vim wordpress.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: wordpress
spec:
  containers:
    - name: nginx
      image: nginx
    - name: php
      image: alvinos/php:v2-fpm-mysql
    - name: mysql
      image: mysql:5.7
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123"

# k8s部署一個yaml的應用:kubectl apply -f [配置清單]
[root@k8s-m-01 ~]# kubectl apply -f pod.yaml 
pod/test-pod create

ImgPullErr : 鏡像拉取失敗
ContainerCreating : 容器創建中

6>Pod的重啟策略

Pod 重啟策略( RestartPolicy )應用于 Pod 內的所有容器,井且僅在 Pod 所處的 Node 上由 kubelet 進行判斷和重啟操作,
當某個容器例外退出或者健康檢查失敗時, kubelet 將根據 RestartPolicy 設定來進行相應的操作,Pod 的重啟策略包括:Always、OnFailure 和 Never,默認值為 Always

# 1. Always: (默認)
當容器失效時,由 kubelet 自動重啟該容器,
# 2. OnFailure:
當容器終止運行且退出碼不為 0 時,由 kubelet 自動重啟該容器
# 3. Never:
不論容器運行狀態如何,kubelet 都不會重啟該容器,
   kubelet 重啟失效容器的時間間隔以 sync-frequency 乘以 2n 來計算;例如 1、2、4、8 倍等,最長延時5min ,并且在成功重啟后的 10 min 后重置該時間,
   Pod 的重啟策略與控制方式息息相關,當前可用于管理 Pod 的控制器包括 ReplicationController、Job、DaemonSet 及直接通過 kubelet 管理(靜態 Pod),每種控制器對 Pod 的重啟策略要求如下:
   # 1.RC 和 DaemonSet:必須設定為 Always,需要保證該容器持續運行,
   # 2.Job 和 CronJob:OnFailure 或 Never,確保容器執行完成后不再重啟,
   # 3.kubelet:在 Pod 失效時自動重啟它,不論將 RestartPolicy 設定為什么值,也不會對 Pod 進行健康檢查,

三、名詞介紹

1.k8s中的名稱空間

k8s中名稱空間是用來隔離集群資源,而k8s中的資源也分為名稱空間級資源以及集群級資源,

mysql   客戶端    kubectl
mysqld  服務端    kubernetes

# kubectl是k8s客戶端,它跟k8s沒有任何關系,

# kubectl get [資源名稱] 獲取集群資源的命令

# 1、獲取名稱空間
[root@k8s-m-01 ~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   8d
kube-node-lease   Active   8d
kube-public       Active   8d
kube-system       Active   8d

[root@k8s-m-01 ~]# kubectl get ns  #簡寫
NAME              STATUS   AGE
default           Active   8d
kube-node-lease   Active   8d
kube-public       Active   8d
kube-system       Active   8d

#  注:部署應用一般是部署在自己的名稱空間之內

# 2、k8s中的命名規范
1、必須小寫
2、必須以字母開頭
3、名稱當中只能夠包含字母、數字和中劃線(-)

[root@k8s-m-01 ~]# kubectl create namespace wordpress  # 創建命名空間
namespace/wordpress created

2、namespace

namespace是命名空間,用來做集群資源隔離的(業內默認的標準,一個微服務一個namespace)

k8s集群中:
	1、集群級資源:所有命名空間都能夠使用
	2、命名空間級資源:只能在同一個命名空間內使用

3、Label標簽

標簽可以稱之為資源的標示,一般用于發現資源

一個Label是一個key=value的鍵值對,其中key與value由用戶自己指定,
Label可以附加到各種資源物件上,例如Node、Pod、Service、RC 等,一個資源物件可以定義任意數量的 Label,同一個 Label 也可以被添加到任意數量的資源物件上去,Label 通常在資源物件定義時確定,也可以在物件創建后動態添加或者洗掉,

  • 1、版本標簽:“release” : “stable” , “release” : “canary”
  • 2、環境標簽:“environment” : “dev” , “environment” : “production”
  • 3、架構標簽:“tier” : “frontend” , “tier” : “backend” , “tier” : “middleware”
  • 4、磁區標簽:“partition” : “customerA” , “partition” : “customerB”
  • 5、質量管控標簽:“track” : “daily” , “track” : “weekly”
# docker中的TAG = 倉庫URL/名稱空間/倉庫名稱:版本號

# k8s當做標簽是用來管理(識別一系列)容器,方便與管理和監控擁有同一標簽的所有容器  #標簽是指pod,但是pod是管理容器的
[root@k8s-m-01 ~]# vim tag.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test-tag
  labels:
    release: stable
spec:
  containers:
    - name: nginx
      image: nginx
      
      
# 1、查看label
[root@k8s-m-01 ~]# kubectl get pod --show-labels 
NAME       READY   STATUS    RESTARTS   AGE   LABELS
test-tag   1/1     Running   0          67s   release=stable


# 2、增加標簽
kubectl label pod(資源型別) test-tag app=tag

[root@k8s-m-01 ~]# kubectl label pod test-tag app=tag
pod/test-tag labeled
[root@k8s-m-01 ~]# kubectl get pod --show-labels 
NAME                     READY   STATUS             RESTARTS   AGE     LABELS
test-tag                 0/1     ImagePullBackOff   0          2m15s   app=tag,release=stable

# 3、洗掉標簽
[root@k8s-m-01 ~]# kubectl label pod test-tag app-
pod/test-tag labeled
# 4、查看標簽
[root@k8s-m-01 ~]# kubectl get pod --show-labels 
NAME       READY   STATUS    RESTARTS   AGE     LABELS
test-tag   1/1     Running   0          7m53s   release=stable

#  5、修改標簽
## 先洗掉后增加
kubectl label pod test-tag app=tag release-
kubectl label pod test-tag app=tag release=bate

# 6、版本
stable 穩定版本
beta  公測版本
alpha 內測版本

=================================================================================
# 查看資源標簽標簽
kubectl get deployment --show-labels

# 創建標簽
kubectl label [資源型別] [資源名] [key=value]

# 洗掉標簽
kubectl label [資源型別] [資源名]  key-

3.k8s中常用命令

# 1.獲取資源
kubectl get [資源名稱]

[root@k8s-m-01 ~]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
test   1/1     Running   1          6d

# 2.創建資源
kubectl apply [資源型別] [資源名稱]
kubectl apply -f [資源清單的路徑]

[root@k8s-m-01 ~]# vim tag.yaml
[root@k8s-m-01 ~]# kubectl apply -f tag.yaml 

4.控制器

k8s中控制器分為:deployment、DaemonSet、Statufluset
控制器是用來管理Pod

# 1、Deployment:一般用來部署長期運行的、無狀態的應用
	特點:集群之中,隨機部署
# 2、DaemonSet:每一個節點上部署一個Pod,洗掉節點自動洗掉對應的POD(zabbix-agent)
	特點:每一臺上有且只有一臺
# 3、StatudfluSet: 部署有狀態應用
	特點:有啟動順序

控制器使用來做什么的?
	- 管理Pod

# Deploymnet: 
在Deployment物件中描述所需的狀態,然后Deployment控制器將實際狀態以受控的速率更改為所需的狀態,

1)deployment(部署長期運行、無狀態應用)

# 1、deployment:在deployment物件中描述所需狀態,然后deployment控制器將實際狀態以受控的速率更改為所需的狀態(自愈)
一般用來部署長期運行的,無狀態的應用(對啟動順序沒有要求的(php nginx))

總結:主要功能是保證有足夠的Pod正常對外提供服務

特點:集群之中,隨機部署

# 2、創建deployment.yaml
[root@k8s-m-01 ~]# vim deployment.yaml
apiVersion: apps/v1  # kubectl explain deployment查看deployment版本號:apps/v1
kind: Deployment  #型別
metadata:  #元資料
  name: deployment  #deployment的名稱
spec:  #定義容器的詳細資訊
  replicas: 1  #創建Pod的副本數(默認)
  selector:  #標簽選擇器:定義Deployment 如何找到要管理的 Pod,與 template 的 label(標簽)對應
    matchLabels: #精確匹配
      release: stable  #對應Pod標簽
  template:  #創建Pod的模板---------以下是Pod資訊
    metadata:  #Pod元資料
      name: test-tag  #Pod名稱(可不定義,隨機生成)
      labels:  #標簽
        release: stable 
    spec:  #定義容器詳細資訊
      containers:  #容器串列
        - name: nginx
          image: nginx

# 3、創建deployment
[root@k8s-m-01 ~]# kubectl apply -f deployment.yaml   #創建deployment
deployment.apps/deployment created
[root@k8s-m-01 ~]# kubectl get deployment   #查看deployment
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
deployment   1/1     1            1           51s
# 4、查看pods
[root@k8s-m-01 ~]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
deployment-7bf4d6cd75-nxsjg   1/1     Running   0          2m24s
test-tag                      1/1     Running   0          41m
# 5、洗掉deployment
[root@k8s-m-01 ~]# kubectl delete pod deployment-7bf4d6cd75-nxsjg 
# 6、重新查看pods
[root@k8s-m-01 ~]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
deployment-7bf4d6cd75-cm2jn   1/1     Running   0          21s
test-tag                      1/1     Running   0          42m
# 7、查看部署詳情
[root@k8s-m-01 ~]# kubectl describe deployments.apps 
Name:                   deployment
Namespace:              default
CreationTimestamp:      Sat, 24 Jul 2021 10:52:32 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               release=stable
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  release=stable
  Containers:
   nginx:
    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:   deployment-7bf4d6cd75 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  75s   deployment-controller  Scaled up replica set deployment-7bf4d6cd75 to 1

1>彈性擴容的3種方法
# 1.修改配置清單
[root@k8s-m-01 ~]# kubectl edit deployments deployment  #推薦
 # deployments是資源型別  資源名稱是deployment
spec:
  progressDeadlineSeconds: 600
  replicas: 10  # 修改這個引數
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      release: stable

[root@k8s-m-01 ~]# kubectl get pods -w  #監控pod狀態(自動創建10個)
NAME                          READY   STATUS    RESTARTS   AGE
deployment-7bf4d6cd75-cm2jn   1/1     Running   0          6m59s
test-tag                      1/1     Running   0          48m
deployment-7bf4d6cd75-c25tl   0/1     Pending   0          0s
deployment-7bf4d6cd75-c25tl   0/1     Pending   0          0s
deployment-7bf4d6cd75-vvgff   0/1     Pending   0          0s
deployment-7bf4d6cd75-ghlvr   0/1     Pending   0          0s
deployment-7bf4d6cd75-j7zpk   0/1     Pending   0          0s
deployment-7bf4d6cd75-ck57d   0/1     Pending   0          0s
deployment-7bf4d6cd75-tk6sw   0/1     Pending   0          0s
deployment-7bf4d6cd75-8kljt   0/1     Pending   0          0s
deployment-7bf4d6cd75-vvgff   0/1     Pending   0          0s
deployment-7bf4d6cd75-ghlvr   0/1     Pending   0          0s


#2.命令列打標簽
[root@k8s-m-01 ~]# kubectl patch deployments.apps deployment -p '{"spec":{"replicas":4}}'   #自動縮容到4臺-
#  deployments.apps 資源全稱
deployment.apps/deployment patched
[root@k8s-m-01 ~]# kubectl get pods -w #實時監控
NAME                          READY   STATUS    RESTARTS   AGE
deployment-7bf4d6cd75-cm2jn   1/1     Running   0          11m
deployment-7bf4d6cd75-j7zpk   1/1     Running   0          4m21s
deployment-7bf4d6cd75-mrlj7   1/1     Running   0          4m21s
deployment-7bf4d6cd75-tk6sw   1/1     Running   0          4m21s
test-tag                      1/1     Running   0          53m
[root@k8s-m-01 ~]# kubectl patch deployments.apps deployment -p '{"spec":{"replicas":40}}'   #自動擴容到40臺
deployment.apps/deployment patched

# 3.scale
[root@k8s-m-01 ~]# kubectl scale deployment/deployment --replicas=2
# 資源型別/資源名稱
deployment.apps/deployment scaled
[root@k8s-m-01 ~]# kubectl get pods  #查看pods
NAME                          READY   STATUS    RESTARTS   AGE
deployment-7bf4d6cd75-cm2jn   1/1     Running   0          14m
deployment-7bf4d6cd75-j7zpk   1/1     Running   0          7m36s
test-tag                      1/1     Running   0          56m

2>更新(首先要存在低版本才可以更新)
# 1.編輯django.yaml(基礎版本)
[root@k8s-m-01 ~]# vi djiaogo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: django
spec:
  replicas: 1
  selector:
    matchLabels:
      app: stable
  template:
    metadata:
      labels:
        app: stable
    spec:
      containers:
        - name: nginx1
          image: nginx:1.17.10

#2.創建Pod
[root@k8s-m-01 ~]# kubectl apply -f django.yaml 
deployment.apps/django created

# 1—監控中 (獲取podid)
[root@k8s-m-01 ~]# kubectl get pods -w
NAME                          READY   STATUS    RESTARTS   AGE
deployment-7bf4d6cd75-cm2jn   1/1     Running   0          18m
test-tag                      1/1     Running   0          60m
django-54bb9d4cd6-m6pgm       0/1     Pending   0          0s
django-54bb9d4cd6-m6pgm       0/1     Pending   0          0s
django-54bb9d4cd6-m6pgm       0/1     ContainerCreating   0          0s

# 2-進入容器查看版本號
[root@k8s-m-01 ~]# kubectl exec -it django-54bb9d4cd6-m6pgm -- 
root@django-54bb9d4cd6-m6pgm:/# nginx -v
nginx version: nginx/1.17.10

# 3.更新鏡像
方式一:打標簽
## 打標簽
[root@k8s-m-01 ~]# kubectl patch deployments.apps django -p '{"spec":{"template":{"spec":{"containers":[{"image":"nginx:1.18.0", "name":"nginx"}]}}}}'
deployment.apps/django patched
# 驗證
[root@k8s-m-01 ~]# kubectl exec -it django-6c5b55f69f-qnb6d  -- 
Defaulted container "nginx" out of: nginx, nginx1
root@django-6c5b55f69f-qnb6d:/# nginx -v
nginx version: nginx/1.18.0
方式二:修改配置清單
# 修改配置清單
[root@k8s-m-01 ~]# vim django.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: django
spec:
  replicas: 1
  selector:
    matchLabels:
      app: stable
  template:
    metadata:
      labels:
        app: stable
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.9
##驗證         
[root@k8s-m-01 ~]# kubectl exec -it deployment-5849786498-6zpws -- 
root@deployment-5849786498-6zpws:/# nginx -v
nginx version: nginx/1.19.9

方式三:
##設定鏡像(重點)
[root@k8s-m-01 ~]# kubectl set image deployment/django nginx=nginx:1.16.0
##驗證
[root@k8s-m-01 ~]# kubectl exec -it django-65b6bd487f-qtrv9 -- 
Defaulted container "nginx" out of: nginx, nginx1
root@django-65b6bd487f-qtrv9:/# nginx -v
nginx version: nginx/1.16.0
方式四:
## edit
[root@k8s-m-01 ~]# kubectl edit deployment.apps django
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: stable
    spec:
      containers:
      - image: nginx:1.19.0  #修改版本號
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
##驗證
[root@k8s-m-01 ~]# kubectl exec -it django-65c9b58dfb-zwg6z -- 
Defaulted container "nginx" out of: nginx, nginx1
root@django-65c9b58dfb-zwg6z:/# nginx -v
nginx version: nginx/1.19.0

3>回滾
# 1、查看資源歷史
[root@k8s-m-01 ~]# kubectl rollout history deployment django 
deployment.apps/django 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>
4         <none>
5         <none>
6         <none>
7         <none>

# 2、回滾到上一級
[root@k8s-m-01 ~]# kubectl rollout undo deployment django
deployment.apps/django 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>
4         <none>
5         <none>
8         <none>
9         <none>
注:目前是到第7級,回滾是回滾到6,回滾后7不顯示,顯示成6,6與7內容一樣

# 3、回滾指定版本
[root@k8s-m-01 ~]# kubectl rollout undo deployment django --to-revision=1
deployment.apps/django rolled back
[root@k8s-m-01 ~]# kubectl rollout history deployment django
deployment.apps/django 
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
4         <none>
5         <none>
8         <none>
9         <none>
10        <none>
注:回滾到1版本,1不展示,變成10

2)DaemonSet(一般用來監控、收集日志)

在集群中所有的節點上部署只部署一個Pod

# 在集群中所有的節點上部署只部署一個Pod,洗掉節點自動洗掉對應得Pod
# 特點:每臺上有且只有一個
[root@k8s-m-01 ~]# vim zabbix-agent.yaml 
apiVersion: apps/v1  #kubectl explain DaemonSet 查看版本號
kind: DaemonSet
metadata:
  name: zabbix-agent
spec:
  selector:
    matchLabels:
      app: zabbix-agent
  template:
    metadata:
      labels:
        app: zabbix-agent
    spec:
      containers:
        - name: zabbix-agent
          image: zabbix/zabbix-agent:5.2.6-centos
[root@k8s-m-01 ~]# kubectl apply -f zabbix-agent.yaml 

# 更新
1、修改組態檔
[root@k8s-m-01 ~]# kubectl edit daemonsets.apps zabbix-agent 
 spec:
      containers:
     - image: zabbix/zabbix-agent:centos-5.2.5 #修改版本
daemonset.apps/zabbix-agent edited

2、打標簽的方式
[root@k8s-m-01 ~]# kubectl patch daemonsets.apps zabbix-agent  -p '{"spec":{"template":{"spec":{"containers":[{"image":"zabbix/zabbix-agent:centos-5.2.4", "name":"zabbix-agent"}]}}}}'
daemonset.apps/zabbix-agent patched

3、設定鏡像
[root@k8s-m-01 ~]# kubectl set image daemonset/zabbix-agent zabbix-agent=zabbix/zabbix-agent:centos-5.2.3
daemonset.apps/zabbix-agent image updated
4、查看記錄
[root@k8s-m-01 ~]# kubectl rollout history daemonset zabbix-agent 
daemonset.apps/zabbix-agent 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>
4         <none>

## 回滾到上一個版本
[root@k8s-m-01 ~]# kubectl rollout history daemonset zabbix-agent 
daemonset.apps/zabbix-agent 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
4         <none>
5         <none>
## 回滾到指定版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent --to-revision=1
daemonset.apps/zabbix-agent rolled back

3)擴展

# 1、k8s-m-01節點執行
[root@k8s-m-01 ~]# kubectl get nodes  # master監控
NAME       STATUS   ROLES                  AGE   VERSION
k8s-m-01   Ready    control-plane,master   8d    v1.21.2
k8s-n-01   Ready    <none>                 8d    v1.21.2
k8s-n-02   Ready    <none>                 11s   v1.21.2
[root@k8s-m-01 ~]# kubectl delete nodes k8s-n-02 #洗掉k8s-n-02節點
node "k8s-n-02" deleted
[root@k8s-m-01 ~]# kubectl get nodes 
NAME       STATUS   ROLES                  AGE   VERSION
k8s-m-01   Ready    control-plane,master   8d    v1.21.2
k8s-n-01   Ready    <none>                 8d    v1.21.2
# 2、k8s-n-2節點執行
[root@k8s-n-02 ~]# kubeadm reset
[root@k8s-n-02 ~]# rm -rf /etc/kubernetes/
# 3、k8s-m-01節點生成token
[root@k8s-m-01 ~]# kubeadm token create --print-join-command
kubeadm join 192.168.15.111:6443 --token uqvjwm.lr9e35a0brzl1r9f --discovery-token-ca-cert-hash sha256:e9a22201e9fb0575a7281b42c53377c119880e0aca5217a7134fe474e5cd7422 
# 4、k8s-n-02節點重新加入集群
[root@k8s-n-02 ~]# kubeadm join 192.168.15.111:6443 --token uqvjwm.lr9e35a0brzl1r9f --discovery-token-ca-cert-hash sha256:e9a22201e9fb0575a7281b42c53377c119880e0aca5217a7134fe474e5cd7422
# 5、重新查看master節點監控
[root@k8s-m-01 ~]# kubectl get nodes 
NAME       STATUS   ROLES                  AGE   VERSION
k8s-m-01   Ready    control-plane,master   8d    v1.21.2
k8s-n-01   Ready    <none>                 8d    v1.21.2
k8s-n-02   Ready    <none>                 11s   v1.21.2

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290411.html

標籤:其他

上一篇:nginx服務器的下載安裝與使用

下一篇:python網路基礎

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more