<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>

          如何絲滑般將 Kubernetes 容器運(yùn)行時(shí)從 Docker 切換成 Containerd

          共 29714字,需瀏覽 60分鐘

           ·

          2021-08-21 06:13

          前面我們了解了 containerd 的發(fā)展歷史和基本使用方式,本節(jié)我們就來(lái)嘗試下使用 containerd 來(lái)作為 Kubernetes 集群的容器運(yùn)行時(shí)。

          前面我們安裝的集群默認(rèn)使用的是 Docker 作為容器運(yùn)行時(shí),那么應(yīng)該如何將容器運(yùn)行時(shí)從 Docker 切換到 containerd 呢?

          維護(hù)節(jié)點(diǎn)

          首先標(biāo)記需要切換的節(jié)點(diǎn)為維護(hù)模式,強(qiáng)制驅(qū)逐節(jié)點(diǎn)上正在運(yùn)行的 Pod,這樣可以最大程度降低切換過(guò)程中影響應(yīng)用的正常運(yùn)行,比如我們先將 node1 節(jié)點(diǎn)切換到 containerd。

          首先使用 kubectl cordon 命令將 node1 節(jié)點(diǎn)標(biāo)記為 unschedulable 不可調(diào)度狀態(tài):

          # 將 node1 標(biāo)記為 unschedulable
          ?  ~ kubectl cordon node1
          node/node1 cordoned
          ?  ~ kubectl get nodes
          NAME     STATUS                     ROLES    AGE   VERSION
          master   Ready                      master   85d   v1.19.11
          node1    Ready,SchedulingDisabled   <none>   85d   v1.19.11
          node2    Ready                      <none>   85d   v1.19.11

          執(zhí)行完上面的命令后,node1 節(jié)點(diǎn)變成了一個(gè) SchedulingDisabled 狀態(tài),表示不可調(diào)度,這樣新創(chuàng)建的 Pod 就不會(huì)調(diào)度到當(dāng)前節(jié)點(diǎn)上來(lái)了。

          接下來(lái)維護(hù) node1 節(jié)點(diǎn),使用 kubectl drain 命令來(lái)維護(hù)節(jié)點(diǎn)并驅(qū)逐節(jié)點(diǎn)上的 Pod:

          # 維護(hù) node1 節(jié)點(diǎn),驅(qū)逐 Pod
          ?  ~ kubectl drain node1 --ignore-daemonsets
          node/node1 already cordoned
          WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-mzdgl, kube-system/kube-proxy-vddh9, lens-metrics/node-exporter-2g4hr
          evicting pod "kiali-85c8cdd5b5-27cwv"
          evicting pod "jenkins-587b78f5cd-9gvn8"
          evicting pod "argocd-application-controller-0"
          pod/argocd-application-controller-0 evicted
          pod/kiali-85c8cdd5b5-27cwv evicted
          pod/jenkins-587b78f5cd-9gvn8 evicted
          node/node1 evicted

          上面的命令會(huì)強(qiáng)制將 node1 節(jié)點(diǎn)上的 Pod 進(jìn)行驅(qū)逐,我們加了一個(gè) --ignore-daemonsets 的參數(shù)可以用來(lái)忽略 DaemonSet 控制器管理的 Pods,因?yàn)檫@些 Pods 不用驅(qū)逐到其他節(jié)點(diǎn)去,當(dāng)節(jié)點(diǎn)驅(qū)逐完成后接下來(lái)我們就可以來(lái)對(duì)節(jié)點(diǎn)進(jìn)行維護(hù)操作了,除了切換容器運(yùn)行時(shí)可以這樣操作,比如我們需要變更節(jié)點(diǎn)配置、升級(jí)內(nèi)核等操作的時(shí)候都可以先將節(jié)點(diǎn)進(jìn)行驅(qū)逐,然后再進(jìn)行維護(hù)。

          切換 containerd

          接下來(lái)停掉 docker、containerd 和 kubelet:

          ?  ~ systemctl stop kubelet
          ?  ~ systemctl stop docker
          ?  ~ systemctl stop containerd

          因?yàn)槲覀儼惭b的 Docker 默認(rèn)安裝使用了 containerd 作為后端的容器運(yùn)行時(shí),所以不需要單獨(dú)安裝 containerd 了,當(dāng)然你也可以將 Docker 和 containerd 完全卸載掉,然后重新安裝,這里我們選擇直接使用之前安裝的 containerd。

          因?yàn)?containerd 中默認(rèn)已經(jīng)實(shí)現(xiàn)了 CRI,但是是以 plugin 的形式配置的,以前 Docker 中自帶的 containerd 默認(rèn)是將 CRI 這個(gè)插件禁用掉了的(使用配置 disabled_plugins = ["cri"]),所以這里我們重新生成默認(rèn)的配置文件來(lái)覆蓋掉:

          ?  ~ containerd config default > /etc/containerd/config.toml

          前面我們已經(jīng)介紹過(guò)上面的配置文件了,首先我們修改默認(rèn)的 pause 鏡像為國(guó)內(nèi)的地址,替換 [plugins."io.containerd.grpc.v1.cri"] 下面的 sandbox_image

          [plugins."io.containerd.grpc.v1.cri"]
          sandbox_image = "registry.aliyuncs.com/k8sxio/pause:3.2"
          ......

          同樣再配置下鏡像倉(cāng)庫(kù)的加速器地址:

          [plugins."io.containerd.grpc.v1.cri".registry]
          [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
          [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://bqr1dr1n.mirror.aliyuncs.com"]
          [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
          endpoint = ["https://registry.aliyuncs.com/k8sxio"]

          接下來(lái)修改 kubelet 配置,將容器運(yùn)行時(shí)配置為 containerd,打開(kāi) /etc/sysconfig/kubelet 文件,在該文件中可以添加一些額外的 kubelet 啟動(dòng)參數(shù),配置如下所示:

          KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock"

          上面的配置中我們?cè)黾恿藘蓚€(gè)參數(shù),--container-runtime 參數(shù)是用來(lái)指定使用的容器運(yùn)行時(shí)的,可選值為 docker 或者 remote,默認(rèn)是 docker,由于我們這里使用的是 containerd 這種容器運(yùn)行時(shí),所以配置為 remote 值(也就是除 docker 之外的容器運(yùn)行時(shí)都應(yīng)該指定為 remote),然后第二個(gè)參數(shù) --container-runtime-endpoint 是用來(lái)指定遠(yuǎn)程的運(yùn)行時(shí)服務(wù)的 endpiont 地址的,在 Linux 系統(tǒng)中一般都是使用 unix 套接字的形式,比如這里我們就是指定連接 containerd 的套接字地址 unix:///run/containerd/containerd.sock

          其實(shí)還應(yīng)該配置一個(gè) --image-service-endpoint 參數(shù)用來(lái)指定遠(yuǎn)程 CRI 的鏡像服務(wù)地址,如果沒(méi)有指定則默認(rèn)使用 --container-runtime-endpoint 的值了,因?yàn)?CRI 都會(huì)實(shí)現(xiàn)容器和鏡像服務(wù)的。

          配置完成后重啟 containerd 和 kubelet 即可:

          ?  ~ systemctl daemon-reload
          ?  ~ systemctl restart containerd
          ?  ~ systemctl restart kubelet

          重啟完成后查看節(jié)點(diǎn)狀態(tài)是否正常:

          ?  ~ kubectl get nodes -o wide
          NAME     STATUS                     ROLES    AGE   VERSION    INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
          master   Ready                      master   85d   v1.19.11   192.168.31.30    <none>        CentOS Linux 7 (Core)   3.10.0-1160.25.1.el7.x86_64   docker://19.3.9
          node1    Ready,SchedulingDisabled   <none>   85d   v1.19.11   192.168.31.95    <none>        CentOS Linux 7 (Core)   3.10.0-1160.25.1.el7.x86_64   containerd://1.4.4
          node2    Ready                      <none>   85d   v1.19.11   192.168.31.215   <none>        CentOS Linux 7 (Core)   3.10.0-1160.25.1.el7.x86_64   docker://19.3.9

          獲取節(jié)點(diǎn)的時(shí)候加上 -o wide 可以查看節(jié)點(diǎn)的更多信息,從上面對(duì)比可以看到 node1 節(jié)點(diǎn)的容器運(yùn)行時(shí)已經(jīng)切換到 containerd://1.4.4 了。

          最后把 node1 節(jié)點(diǎn)重新加回到集群中來(lái)允許調(diào)度 Pod 資源:

          ?  ~ kubectl uncordon node1
          node/node1 uncordoned
          ?  ~ kubectl get nodes
          NAME     STATUS   ROLES    AGE   VERSION
          master   Ready    master   85d   v1.19.11
          node1    Ready    <none>   85d   v1.19.11
          node2    Ready    <none>   85d   v1.19.11

          用同樣的方法再去處理其他節(jié)點(diǎn)即可將整個(gè)集群切換成容器運(yùn)行時(shí) containerd 了。

          crictl

          現(xiàn)在我們可以 node1 節(jié)點(diǎn)上使用 ctr 命令來(lái)管理 containerd,查看多了一個(gè)名為 k8s.io 的命名空間:

          ?  ~ ctr ns ls
          NAME   LABELS
          k8s.io
          moby

          上文我們已經(jīng)介紹 kubernetes 集群對(duì)接的 containerd 所有資源都在 k8s.io 的命名空間下面,而 docker 的則默認(rèn)在 moby 下面,當(dāng)然現(xiàn)在 moby 下面沒(méi)有任何的數(shù)據(jù)了,但是在 k8s.io 命名空間下面就有很多鏡像和容器資源了:

          ?  ~ ctr -n moby c ls
          CONTAINER    IMAGE    RUNTIME
          ?  ~ ctr -n moby i ls
          REF TYPE DIGEST SIZE PLATFORMS LABELS
          ?  ~ ctr -n moby t ls
          TASK    PID    STATUS
          ctr -n k8s.io i ls -q
          docker.io/library/busybox:latest
          docker.io/library/busybox@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
          quay.io/coreos/flannel:v0.14.0
          quay.io/coreos/flannel@sha256:4a330b2f2e74046e493b2edc30d61fdebbdddaaedcb32d62736f25be8d3c64d5
          registry.aliyuncs.com/k8sxio/pause:3.2
          ......

          我們當(dāng)然可以直接使用 ctr 命令來(lái)直接管理鏡像或容器資源,但是我們?cè)谑褂眠^(guò)程中明顯可以感覺(jué)到該工具沒(méi)有 docker CLI 方便,從使用便捷性和功能性上考慮,我們更推薦使用 crictl 作為管理工具,crictl 為 CRI 兼容的容器運(yùn)行時(shí)提供 CLI,這允許 CRI 運(yùn)行時(shí)開(kāi)發(fā)人員在無(wú)需設(shè)置 Kubernetes 組件的情況下調(diào)試他們的運(yùn)行時(shí)。

          接下來(lái)我們就先簡(jiǎn)單介紹下如何使用 crictl 工具來(lái)提升管理容器運(yùn)行時(shí)的效率。

          安裝

          首先我們需要先安裝 crictl 工具,直接從 cri-tools 的 release 頁(yè)面下載對(duì)應(yīng)的二進(jìn)制包,解壓放入 PATH 路徑下即可:

          ?  ~ VERSION="v1.22.0"
          ?  ~ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
          # 如果有限制,也可以替換成下面的 URL 加速下載
          # wget https://download.fastgit.org/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
          ?  ~ tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
          ?  ~ rm -f crictl-$VERSION-linux-amd64.tar.gz
          ?  ~ crictl -v
          crictl version v1.22.0

          到這里證明 crictl 工具安裝成功了。

          用法

          crictl 安裝完成后,接下來(lái)我們來(lái)了解下該工具的一些常見(jiàn)使用方法。

          首先需要修改下默認(rèn)的配置文件,默認(rèn)為 /etc/crictl.yaml,在文件中指定容器運(yùn)行時(shí)和鏡像的 endpoint 地址,內(nèi)容如下所示:

          runtime-endpoint: unix:///var/run/containerd/containerd.sock
          image-endpoint: unix:///var/run/containerd/containerd.sock
          debug: false
          pull-image-on-create: false
          disable-pull-on-run: false

          配置完成后就可以使用 crictl 命令了。

          獲取 Pod 列表

          通過(guò) crictl pods 命令可以獲取當(dāng)前節(jié)點(diǎn)上運(yùn)行的 Pods 列表,如下所示:

          ?  ~ crictl pods
          POD ID              CREATED             STATE               NAME                       NAMESPACE           ATTEMPT             RUNTIME
          cb18081b33933       39 minutes ago      Ready               kube-flannel-ds-mzdgl      kube-system         1                   (default)
          95d6004c55902       40 minutes ago      Ready               node-exporter-2g4hr        lens-metrics        1                   (default)
          cfae80b3209db       40 minutes ago      Ready               kube-proxy-vddh9           kube-system         1                   (default)
          99ac2583da87f       40 minutes ago      Ready               jenkins-587b78f5cd-dfzns   kube-ops            0                   (default)
          07ebdc51f1def       45 minutes ago      NotReady            node-exporter-2g4hr        lens-metrics        0                   (default)
          bec027b98f194       45 minutes ago      NotReady            kube-proxy-vddh9           kube-system         0                   (default)
          b44b5ec385053       45 minutes ago      NotReady            kube-flannel-ds-mzdgl      kube-system         0                   (default)

          還可以使用 --name 參數(shù)獲取指定的 Pod:

          ?  ~ crictl pods --name kube-flannel-ds-mzdgl
          POD ID              CREATED             STATE               NAME                    NAMESPACE           ATTEMPT             RUNTIME
          cb18081b33933       About an hour ago   Ready               kube-flannel-ds-mzdgl   kube-system         1                   (default)

          同樣也可以根據(jù)標(biāo)簽來(lái)篩選 Pod 列表:

          ?  ~ crictl pods --label app=flannel
          POD ID              CREATED             STATE               NAME                    NAMESPACE           ATTEMPT             RUNTIME
          cb18081b33933       About an hour ago   Ready               kube-flannel-ds-mzdgl   kube-system         1                   (default)

          獲取鏡像列表

          使用 crictl images 命令可以獲取所有的鏡像:

          ?  ~ crictl images
          IMAGE                                     TAG                 IMAGE ID            SIZE
          docker.io/jenkins/jenkins                 lts                 3b4ec91827f28       303MB
          docker.io/library/busybox                 latest              69593048aa3ac       771kB
          quay.io/coreos/flannel                    v0.14.0             8522d622299ca       21.1MB
          quay.io/prometheus/node-exporter          v1.0.1              0e0218889c33b       13MB
          registry.aliyuncs.com/k8sxio/kube-proxy   v1.19.11            732e0635ac9e0       49.3MB
          registry.aliyuncs.com/k8sxio/pause        3.2                 80d28bedfe5de       300kB

          同樣在命令后面可以加上 -v 參數(shù)來(lái)顯示鏡像的詳細(xì)信息:

          ?  ~ crictl images -v
          ID: sha256:3b4ec91827f28ed482b08f6e379c56ea2308967d10aa4f458442c922e0771f87
          RepoTags: docker.io/jenkins/jenkins:lts
          RepoDigests: docker.io/jenkins/jenkins@sha256:abcd55c9f19c85808124a4d82e3412719cd5c511c03ebd7d4210e9fa9e8f1029
          Size: 302984002
          Username: jenkins

          ID: sha256:69593048aa3acfee0f75f20b77acb549de2472063053f6730c4091b53f2dfb02
          RepoTags: docker.io/library/busybox:latest
          RepoDigests: docker.io/library/busybox@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
          Size: 770886

          ......

          獲取容器列表

          使用 crictl ps 命令可以獲取正在運(yùn)行的容器列表:

          ?  ~ crictl ps
          CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID
          c8474738e4587       3b4ec91827f28       About an hour ago   Running             jenkins             0                   99ac2583da87f
          0f9c826f87ef8       8522d622299ca       About an hour ago   Running             kube-flannel        1                   cb18081b33933
          da444f718d37b       0e0218889c33b       About an hour ago   Running             node-exporter       1                   95d6004c55902
          a484a8a69ea59       732e0635ac9e0       About an hour ago   Running             kube-proxy          1                   cfae80b3209db

          還有更多其他可選參數(shù),可以通過(guò) crictl ps -h 獲取,比如顯示最近創(chuàng)建的兩個(gè)容器:

          ?  ~ crictl ps -n 2
          CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID
          c8474738e4587       3b4ec91827f28       About an hour ago   Running             jenkins             0                   99ac2583da87f
          0f9c826f87ef8       8522d622299ca       About an hour ago   Running             kube-flannel        1                   cb18081b33933

          使用 -s 選項(xiàng)按照狀態(tài)進(jìn)行過(guò)濾:

          ?  ~ crictl ps -s Running
          CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID
          c8474738e4587       3b4ec91827f28       About an hour ago   Running             jenkins             0                   99ac2583da87f
          0f9c826f87ef8       8522d622299ca       About an hour ago   Running             kube-flannel        1                   cb18081b33933
          da444f718d37b       0e0218889c33b       About an hour ago   Running             node-exporter       1                   95d6004c55902
          a484a8a69ea59       732e0635ac9e0       About an hour ago   Running             kube-proxy          1                   cfae80b3209db

          在容器中執(zhí)行命令

          crictl 也有類(lèi)似 exec 的命令支持,比如在容器 ID 為 c8474738e4587 的容器中執(zhí)行一個(gè) date 命令:

          ?  ~ crictl exec -it c8474738e4587 date
          Tue 17 Aug 2021 08:23:02 AM UTC

          輸出容器日志

          還可以獲取容器日志信息:

          ?  ~ crictl logs c8474738e4587
          ......
          2021-08-17 07:19:51.846+0000 [id=155]   INFO    hudson.model.AsyncPeriodicWork#lambda$doRun$0: Started Periodic background build discarder
          2021-08-17 07:19:51.854+0000 [id=155]   INFO    hudson.model.AsyncPeriodicWork#lambda$doRun$0: Finished Periodic background build discarder. 6 ms
          2021-08-17 08:19:51.846+0000 [id=404]   INFO    hudson.model.AsyncPeriodicWork#lambda$doRun$0: Started Periodic background build discarder
          2021-08-17 08:19:51.848+0000 [id=404]   INFO    hudson.model.AsyncPeriodicWork#lambda$doRun$0: Finished Periodic background build discarder. 1 ms

          kubectl logs 類(lèi)似于,還可以使用 -f 選項(xiàng)來(lái) Follow 日志輸出,--tail N 也可以指定輸出最近的 N 行日志。

          資源統(tǒng)計(jì)

          使用 crictl stats 命令可以列舉容器資源的使用情況:

          ?  ~ crictl stats
          CONTAINER           CPU %               MEM                 DISK                INODES
          0f9c826f87ef8       0.00                21.2MB              0B                  17
          a484a8a69ea59       0.00                23.55MB             12.29kB             25
          c8474738e4587       0.08                413.2MB             3.338MB             12
          da444f718d37b       0.00                14.46MB             0B                  16

          此外鏡像和容器相關(guān)的一些操作也都支持,比如:

          • 拉取鏡像:crictl pull
          • 運(yùn)行 Pod:crictl runp
          • 運(yùn)行容器:crictl run
          • 啟動(dòng)容器:crictl start
          • 刪除容器:crictl rm
          • 刪除鏡像:crictl rmi
          • 刪除 Pod:crictl rmp
          • 停止容器:crictl stop
          • 停止 Pod:crictl stopp
          • ......

          更多信息請(qǐng)參考 https://github.com/kubernetes-sigs/cri-tools

          CLI 對(duì)比

          前面我們了解了圍繞鏡像、容器和 Pod 可以使用 docker、ctr、crictl 這些命令行工具進(jìn)行管理,接下來(lái)我們就來(lái)比較下這幾個(gè)常用命令的使用區(qū)別。

          命令DockerContainerd
          dockercrictl(推薦)ctr
          查看容器列表docker pscrictl psctr -n k8s.io c ls
          查看容器詳情docker inspectcrictl inspectctr -n k8s.io c info
          查看容器日志docker logscrictl logs無(wú)
          容器內(nèi)執(zhí)行命令docker execcrictl exec無(wú)
          掛載容器docker attachcrictl attach無(wú)
          顯示容器資源使用情況docker statscrictl stats無(wú)
          創(chuàng)建容器docker createcrictl createctr -n k8s.io c create
          啟動(dòng)容器docker startcrictl startctr -n k8s.io run
          停止容器docker stopcrictl stop無(wú)
          刪除容器docker rmcrictl rmctr -n k8s.io c del
          查看鏡像列表docker imagescrictl imagesctr -n k8s.io i ls
          查看鏡像詳情docker inspectcrictl inspecti無(wú)
          拉取鏡像docker pullcrictl pullctr -n k8s.io i pull
          推送鏡像docker push無(wú)ctr -n k8s.io i push
          刪除鏡像docker rmicrictl rmictr -n k8s.io i rm
          查看Pod列表無(wú)crictl pods無(wú)
          查看Pod詳情無(wú)crictl inspectp無(wú)
          啟動(dòng)Pod無(wú)crictl runp無(wú)
          停止Pod無(wú)crictl stopp無(wú)

          需要注意的是通過(guò) ctr containers create 命令創(chuàng)建的容器只是一個(gè)靜態(tài)的容器,所以還需要通過(guò) ctr task start 來(lái)啟動(dòng)容器進(jìn)程。當(dāng)然,也可以直接使用 ctr run 命令來(lái)創(chuàng)建并運(yùn)行容器。在進(jìn)入容器操作時(shí),與 docker 不同的是,必須在 ctr task exec 命令后指定 --exec-id 參數(shù),這個(gè) id 可以隨便寫(xiě),只要唯一就行。另外,ctr 沒(méi)有 stop 容器的功能,只能暫停(ctr task pause)或者殺死(ctr task kill)容器。

          另外要說(shuō)明的是 crictl pods 列出的是 Pod 的信息,包括 Pod 所在的命名空間以及狀態(tài)。crictl ps 列出的是應(yīng)用容器的信息,而 docker ps 列出的是初始化容器(pause 容器)和應(yīng)用容器的信息,初始化容器在每個(gè) Pod 啟動(dòng)時(shí)都會(huì)創(chuàng)建,通常不會(huì)關(guān)注,所以 crictl 使用起來(lái)更簡(jiǎn)潔明了一些。

          日志配置

          docker 和 containerd 除了在常用命令上有些區(qū)別外,在容器日志及相關(guān)參數(shù)配置方面也存在一些差異。

          當(dāng)使用 Docker 作為 Kubernetes 容器運(yùn)行時(shí)的時(shí)候,容器日志的落盤(pán)是由 Docker 來(lái)完成的,日志被保存在類(lèi)似 /var/lib/docker/containers/<CONTAINER> 的目錄下面,kubelet 會(huì)在 /var/log/pods/var/log/containers 下面創(chuàng)建軟鏈接,指向容器日志目錄下的容器日志文件。對(duì)應(yīng)的日志相關(guān)配置可以通過(guò)配置文件進(jìn)行指定,如下所示:

          {
              "log-driver""json-file",
              "log-opts": {
                  "max-size""100m",
                  "max-file: "10"
              }
          }

          而當(dāng)使用 containerd 作為 Kubernetes 容器運(yùn)行時(shí)的時(shí)候,容器日志的落盤(pán)則由 kubelet 來(lái)完成了,被直接保存在 /var/log/pods/<CONTAINER> 目錄下面,同時(shí)在 /var/log/containers 目錄下創(chuàng)建軟鏈接指向日志文件。同樣日志配置則是通過(guò) kubelet 參數(shù)中進(jìn)行指定的,如下所示:

          --container-log-max-files=10 --container-log-max-size="100Mi"

          所以如果我們有進(jìn)行日志收集理論上來(lái)說(shuō)兩種方案都是兼容的,基本上不用改動(dòng)。

          當(dāng)然除了這些差異之外,可能對(duì)于我們來(lái)說(shuō)鏡像構(gòu)建這個(gè)環(huán)節(jié)是我們最需要關(guān)注的了。切換到 containerd 之后,需要注意 docker.sock 不再可用,也就意味著不能再在容器里面執(zhí)行 docker 命令來(lái)構(gòu)建鏡像了。所以接下來(lái)需要和大家介紹幾種不需要使用 docker.sock 也可以構(gòu)建鏡像的方法。


          K8S 進(jìn)階訓(xùn)練營(yíng)


           點(diǎn)擊屏末  | 即刻學(xué)習(xí)


          掃描二維碼獲取

          更多云原生知識(shí)





          k8s 技術(shù)圈

          瀏覽 59
          點(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>
                  国产人人操人人色 | 亚洲精品乱码久久久久99 | 看一级黄色视频 | 高潮喷水合集www | 超碰自拍99 |