<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          1款開源工具,實(shí)現(xiàn)自動(dòng)化升級(jí)K3S集群!

          共 8761字,需瀏覽 18分鐘

           ·

          2020-11-28 02:34

          即便你的集群能夠平穩(wěn)運(yùn)行,Kubernetes升級(jí)依舊是一項(xiàng)艱難的任務(wù)。由于每3個(gè)月Kubernetes會(huì)發(fā)布一個(gè)新版本,所以升級(jí)是十分必要的。如果一年內(nèi)你不升級(jí)你的Kubernetes集群,你就會(huì)落后許多。Rancher致力于解決開發(fā)運(yùn)維人員的痛點(diǎn),于是創(chuàng)建了新的開源項(xiàng)目System Upgrade Controller可以幫助開發(fā)人員平滑升級(jí)。


          System Upgrade Controller引入了一個(gè)新的Kubernetes自定義資源定義(CRD),稱為Plan?,F(xiàn)在Plan是處理升級(jí)進(jìn)程的主要組件。以下是從git repo獲取的架構(gòu)圖:



          使用System Upgrade Controller

          自動(dòng)升級(jí)K3s


          升級(jí)K3s Kubernetes集群有兩個(gè)主要要求:


          • CRD安裝

          • 創(chuàng)建Plan


          首先,讓我們檢查當(dāng)前正在運(yùn)行的K3s集群版本。


          運(yùn)行以下命令,即可快速安裝:


          #For master install:curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.16.3-k3s.2 sh
          #For joining nodes:K3S_TOKEN is created at /var/lib/rancher/k3s/server/node-token on the server.For adding nodes, K3S_URL and K3S_TOKEN needs to be passed:
          curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=XXX sh -

          KUBECONFIG file is create at /etc/rancher/k3s/k3s.yaml location


          kubectl get nodes
          NAME STATUS ROLES AGE VERSIONkube-node-c155 Ready <none> 25h v1.16.3-k3s.2kube-node-2404 Ready <none> 25h v1.16.3-k3s.2kube-master-303d Ready master 25h v1.16.3-k3s.2


          現(xiàn)在,我們部署CRD:


          apiVersion: v1kind: Namespacemetadata:  name: system-upgrade---apiVersion: v1kind: ServiceAccountmetadata:  name: system-upgrade  namespace: system-upgrade---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:  name:  system-upgraderoleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-adminsubjects:- kind: ServiceAccount  name: system-upgrade  namespace: system-upgrade---apiVersion: v1kind: ConfigMapmetadata:  name: default-controller-env  namespace: system-upgradedata:  SYSTEM_UPGRADE_CONTROLLER_DEBUG: "false"  SYSTEM_UPGRADE_CONTROLLER_THREADS: "2"  SYSTEM_UPGRADE_JOB_ACTIVE_DEADLINE_SECONDS: "900"  SYSTEM_UPGRADE_JOB_BACKOFF_LIMIT: "99"  SYSTEM_UPGRADE_JOB_IMAGE_PULL_POLICY: "Always"  SYSTEM_UPGRADE_JOB_KUBECTL_IMAGE: "rancher/kubectl:v1.18.3"  SYSTEM_UPGRADE_JOB_PRIVILEGED: "true"  SYSTEM_UPGRADE_JOB_TTL_SECONDS_AFTER_FINISH: "900"  SYSTEM_UPGRADE_PLAN_POLLING_INTERVAL: "15m"---apiVersion: apps/v1kind: Deploymentmetadata:  name: system-upgrade-controller  namespace: system-upgradespec:  selector:    matchLabels:      upgrade.cattle.io/controller: system-upgrade-controller  template:    metadata:      labels:        upgrade.cattle.io/controller: system-upgrade-controller # necessary to avoid drain    spec:      affinity:        nodeAffinity:          requiredDuringSchedulingIgnoredDuringExecution:            nodeSelectorTerms:              - matchExpressions:                  - {key: "node-role.kubernetes.io/master", operator: In, values: ["true"]}      serviceAccountName: system-upgrade      tolerations:        - key: "CriticalAddonsOnly"          operator: "Exists"        - key: "node-role.kubernetes.io/master"          operator: "Exists"          effect: "NoSchedule"      containers:        - name: system-upgrade-controller          image: rancher/system-upgrade-controller:v0.5.0          imagePullPolicy: IfNotPresent          envFrom:            - configMapRef:                name: default-controller-env          env:            - name: SYSTEM_UPGRADE_CONTROLLER_NAME              valueFrom:                fieldRef:                  fieldPath: metadata.labels['upgrade.cattle.io/controller']            - name: SYSTEM_UPGRADE_CONTROLLER_NAMESPACE              valueFrom:                fieldRef:                  fieldPath: metadata.namespace          volumeMounts:            - name: etc-ssl              mountPath: /etc/ssl            - name: tmp              mountPath: /tmp      volumes:        - name: etc-ssl          hostPath:            path: /etc/ssl            type: Directory        - name: tmp          emptyDir: {}


          將上面的yaml分解,它將創(chuàng)建以下組件:


          • system-upgrade命名空間

          • system-upgrade服務(wù)賬戶

          • system-upgrade ClusterRoleBinding

          • 用于設(shè)置容器中環(huán)境變量的config map

          • 實(shí)際部署


          現(xiàn)在,我們來部署yaml:


          #Get the Lateest release tagcurl -s "https://api.github.com/repos/rancher/system-upgrade-controller/releases/latest" | awk -F '"' '/tag_name/{print $4}'v0.6.2
          # Apply the controller manifestkubectl apply -f https://raw.githubusercontent.com/rancher/system-upgrade-controller/v0.6.2/manifests/system-upgrade-controller.yaml
          namespace/system-upgrade createdserviceaccount/system-upgrade createdclusterrolebinding.rbac.authorization.k8s.io/system-upgrade createdconfigmap/default-controller-env createddeployment.apps/system-upgrade-controller created
          # Verify everything is runningkubectl get all -n system-upgrade
          NAME READY STATUS RESTARTS AGEpod/system-upgrade-controller-7fff98589f-blcxs 1/1 Running 0 5m26s
          NAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/system-upgrade-controller 1/1 1 1 5m28s
          NAME DESIRED CURRENT READY AGEreplicaset.apps/system-upgrade-controller-7fff98589f 1 1 1 5m28s


          創(chuàng)建一個(gè)K3s升級(jí)Plan


          現(xiàn)在,是時(shí)候創(chuàng)建一個(gè)升級(jí)Plan。我們將使用在Git repo示例文件夾中提到的示例Plan。


          ---apiVersion: upgrade.cattle.io/v1kind: Planmetadata:  name: k3s-server  namespace: system-upgrade  labels:    k3s-upgrade: serverspec:  concurrency: 1  version: v1.17.4+k3s1  nodeSelector:    matchExpressions:      - {key: k3s-upgrade, operator: Exists}      - {key: k3s-upgrade, operator: NotIn, values: ["disabled", "false"]}      - {key: k3s.io/hostname, operator: Exists}      - {key: k3os.io/mode, operator: DoesNotExist}      - {key: node-role.kubernetes.io/master, operator: In, values: ["true"]}  serviceAccountName: system-upgrade  cordon: true#  drain:#    force: true  upgrade:    image: rancher/k3s-upgrade---apiVersion: upgrade.cattle.io/v1kind: Planmetadata:  name: k3s-agent  namespace: system-upgrade  labels:    k3s-upgrade: agentspec:  concurrency: 2  version: v1.17.4+k3s1  nodeSelector:    matchExpressions:      - {key: k3s-upgrade, operator: Exists}      - {key: k3s-upgrade, operator: NotIn, values: ["disabled", "false"]}      - {key: k3s.io/hostname, operator: Exists}      - {key: k3os.io/mode, operator: DoesNotExist}      - {key: node-role.kubernetes.io/master, operator: NotIn, values: ["true"]}  serviceAccountName: system-upgrade  prepare:    # Since v0.5.0-m1 SUC will use the resolved version of the plan for the tag on the prepare container.    # image: rancher/k3s-upgrade:v1.17.4-k3s1    image: rancher/k3s-upgrade    args: ["prepare", "k3s-server"]  drain:    force: true  upgrade:    image: rancher/k3s-upgrade


          拆解以上yaml,它將創(chuàng)建:


          與表達(dá)式匹配的Plan,以了解需要升級(jí)的內(nèi)容。所以在上述例子中,我們有2個(gè)plan:k3s-serverk3s-agent。node-role.kubernetes.io/master為true和k3s-upgrade的節(jié)點(diǎn)將被server Plan占用。帶false的將由client Plan占用。所以標(biāo)簽必須要設(shè)置正確。接下來,我們來apply Plan。


          #Set the Node Labels
          kubectl label node kube-master-303d node-role.kubernetes.io/master=true

          # Apply the plan manifestkubectl apply -f https://raw.githubusercontent.com/rancher/system-upgrade-controller/master/examples/k3s-upgrade.yamlplan.upgrade.cattle.io/k3s-server createdplan.upgrade.cattle.io/k3s-agent created
          # We see that the jobs have startedkubectl get jobs -n system-upgradeNAME COMPLETIONS DURATION AGEapply-k3s-server-on-kube-master-303d-with-9efdeac5f6ede78-125aa 0/1 40s 40sapply-k3s-agent-on-kube-node-2404-with-9efdeac5f6ede78917-07df3 0/1 39s 39sapply-k3s-agent-on-kube-node-c155-with-9efdeac5f6ede78917-9a585 0/1 39s 39s


          # Upgrade in-progress, completed on the `node-role.kubernetes.io/master=true` nodekubectl get nodesNAME STATUS ROLES AGE VERSIONkube-node-2404 Ready,SchedulingDisabled <none> 26h v1.16.3-k3s.2kube-node-c155 Ready,SchedulingDisabled <none> 26h v1.16.3-k3s.2kube-master-303d Ready master 26h v1.17.4+k3s1
          # In a few minutes all nodes get upgraded to latest version as per the plankubectl get nodesNAME STATUS ROLES AGE VERSIONkube-node-2404 Ready <none> 26h v1.17.4+k3s1kube-node-c155 Ready <none> 26h v1.17.4+k3s1kube-master-303d Ready master 26h v1.17.4+k3s1


          我們的K3s Kubernetes升級(jí)完成!極為輕松而且十分順利。Project可以更新底層操作系統(tǒng)并重啟節(jié)點(diǎn)。歡迎嘗試喲!


          Github地址:

          https://github.com/rancher/system-upgrade-controller



          推薦閱讀

          K3s+Sysdig,8分鐘部署并保護(hù)集群安全!

          在K3s上使用Kong網(wǎng)關(guān)插件,開啟K3s的無限可能!

          配置高可用K3s集群完全攻略



          About k3s


          k3s 是首個(gè)進(jìn)入 CNCF 沙箱項(xiàng)目的 K8S 發(fā)行版,同時(shí)也是當(dāng)前全球用戶量最大的 CNCF 認(rèn)證輕量級(jí) K8S 發(fā)行版。自2019年3月發(fā)布以來,備受全球開發(fā)者們關(guān)注,至今GitHub Star數(shù)已超過 14,700,成為了開源社區(qū)最受歡迎的邊緣計(jì)算 K8S 解決方案。截至目前,K3s全球下載量超過100萬次,每周平均被安裝超過2萬次,其中30%的下載量來自中國。


          k3s 專為在資源有限的環(huán)境中運(yùn)行 Kubernetes 的研發(fā)和運(yùn)維人員設(shè)計(jì),將滿足日益增長的在邊緣計(jì)算環(huán)境中運(yùn)行在 x86、ARM64 和 ARMv7 處理器上的小型、易于管理的 Kubernetes 集群需求。k3s 的發(fā)布,為開發(fā)者們提供了以“Rancher 2.X + k3s”為核心的從數(shù)據(jù)中心到云到邊到端的 K8S 即服務(wù)(Kubernetes-as-a-Service),推動(dòng) Kubernetes Everywhere。

          掃碼添加k3s中文社區(qū)助手

          加入官方中文技術(shù)社區(qū)

          官網(wǎng):https://k3s.io

          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷俺去也| 日韩黄色视频频在线播放 | 日本黄色视频。 | 国语对白在线播放 | 亚洲国产成人7777 |