k8s-控制器deployment彈性擴容,更新鏡像,回滾,DaemonSet,StatufluSet


控制器deployment,DaemonSet,StatefulSet

k8s中控制器分為:deployment、DaemonSet、StatufluSet
Deployment:一般用來部署長期運行的、無狀態的應用
	特點:集群之中,隨機部署 
DaemonSet:每一個節點上部署一個Pod,刪除節點自動刪除對應的POD(zabbix-agent)
	特點:每一台上有且只有一台
StatudfluSet: 部署有狀態應用
	特點:有啟動順序


查看控制器:
kubectl get deployments
kubectl get daemonsets
kubectl get statefulsets
刪除控制器:
kubectl delete deployments 名字
kubectl delete daemonsets 名字
kubectl delete statefulsets 名字

1.控制器-deployment

deployment.yaml

replicas: 1   決定pod部署的數量
Deploymnet:在Deployment對象中描述所需的狀態,然后Deployment控制器將實際狀態以受控的速率更改為所需的狀態。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
spec:
  replicas: 1  		# pod數量
  selector:  			# 選擇器
    matchLabels:  # 標簽
      release: stable # 選擇標簽
  template:  				# 模版
    metadata:
      name: test-tag  # 控制器名字
      labels: 
        release: stable # 設置控制器標簽
    spec:
      containers:
        - name: nginx  # 鏡像名稱
          image: nginx # 鏡像 

deployment模版

apiVersion: v1
kind: Service
metadata:
  name: nginx1
spec:
  selector:
    app: nginx1
  ports:
    - name: http
      port: 8088
      targetPort: 80
      protocol: "TCP"
    - name: https
      port: 443
      targetPort: 443
      protocol: "TCP"
  type: NodePort

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
        - name: nginx1
          image: nginx:1.21.3

pod靜態資源模版

apiVersion: v1
kind: Service
metadata:
  name: nginx2
spec:
  selector:
    app: nginx2
  ports:
    - name: http
      port: 8088
      targetPort: 80
      protocol: "TCP"
    - name: https
      port: 443
      targetPort: 443
      protocol: "TCP"
  type: NodePort

---
apiVersion: v1
kind: Pod
metadata:
  name: nginx2
  labels:
    app: nginx2
spec:
  containers:
    - name: nginx2
      image: nginx:1.21.3

彈性擴容

方式1-修改配置清單

kubectl edit 資源類型 資源名稱
[root@sg-14 k8s_yaml]# kubectl edit deployments test
修改replicas數量:
replicas: 2

方式2-打標簽

[root@sg-14 k8s_yaml]kubectl patch deployments.apps test -p '{"spec":{"replicas":1}}'

方式3-scale

kubectl scale 資源類型/資源名稱 --replicas=10

[root@sg-14 k8s_yaml]# kubectl scale deployment/test --replicas=10

更新鏡像

方式1:打標簽

一層層的按照yaml寫
[root@k8s-m-01 ~]# kubectl patch deployments.apps django -p '{"spec":{"template":{"spec":{"containers":[{"image":"nginx:1.18.0", "name":"nginx"}]}}}}'

方式2:修改配置清單

[root@sg-14 k8s_yaml]# vi test.yaml

image: nginx-lalal
#######
修改鏡像版本
#######

kubectl apply test.yaml //重新部署下

方式3:設置鏡像

kubectl set image 資源類型/資源名稱 鏡像名字=鏡像版本
[root@k8s-m-01 ~]# kubectl set image deployment/django nginx=nginx:1.16.0

方式4:修改edit

kubectl edit [資源類型] [資源名稱]

[root@sg-14 k8s_yaml]# kubectl edit deployments test
找到-image修改

回滾

kubectl rollout undo [資源類型] [資源名稱]
kubectl rollout history deployment  test // 版本歷史
kubectl rollout undo deployment test // 回滾上一個版本
kubectl rollout undo deployment test --to-revision=1 // 回滾指定版本

2.控制器-DaemonSet

daemonset.yaml

# 在集群中所有的節點上部署只部署一個Pod,新加入的node節點也會部署一個

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: zabbix-agent
spec:
  selector:
    matchLabels:
      app: zabbix-agent
  template:
    metadata:
      labels:
        app: zabbix-agent
    spec:
      containers:
        - name: nginx
          image: nginx

修改配置文件daemonset

1、修改配置文件
[root@k8s-m-01 ~]# kubectl edit daemonsets.apps zabbix-agent 

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

回滾

## 回滾到上一個版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent 
daemonset.apps/zabbix-agent rolled back

## 回滾到指定版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent --to-revision=1
daemonset.apps/zabbix-agent rolled back

3.StatefulSet

# StatufluSet最主要的是用來部署有狀態應用
# StatefulSet部署是有狀態應用,擁有統一的網絡,並且有啟動順序。

test.yaml

kind: Service
apiVersion: v1
metadata:
  name: wordpress-test
spec:
  ports:
    - name: http
      port: 80
      targetPort: 80
  selector:
    app: wordpress-test
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: wordpress-test
spec:
  serviceName: wordpress-test
  selector:
    matchLabels:
      app: wordpress-test
  template:
    metadata:
      labels:
        app: wordpress-test
    spec:
      containers:
        - name: php
          image: alvinos/php:wordpress-v2
        - name: nginx
          image: alvinos/nginx:wordpress-v2


免責聲明!

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



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