国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

實戰直擊:Kubernetes棄用Docker?

開發
前段時間,kubernetes推出了1.24版本,曾經轟動一時的docker棄用也正式實裝了,這意味著1.24版本之后,docker將不能作為k8s的容器運行時。docker作為云原生的基礎技術底座,如果kubernetes不再支持docker,這在互聯網IT業界都會引發不大不小的恐慌,這到底該怎么辦?

作者 | 劉啟偉,廣東公司網絡管理中心網管系統室平臺團隊核心專家。近年來,網管系統室一方面大力推進OSS應用建設,為“三零三自”的自智網絡賦能;另一方面,積極推動微服務、容器化、PaaS、DevOps等云原生技術的實踐落地。在團隊中負責DevOps平臺和容器云的建設運營工作,擁有豐富的Kubernetes、Istio、DevOps工具鏈落地實踐經驗,致力于克服技術落地難題,用云原生技術賦能應用。

Labs 導讀

?Kubernetes是一個可移植、可擴展的開源平臺,用于管理容器化的工作負載和服務,可促進聲明式配置和自動化。Kubernetes擁有一個龐大且快速增長的生態系統,其服務、支持和工具的使用范圍廣泛。

1前言

前段時間,kubernetes推出了1.24版本,曾經轟動一時的docker棄用也正式實裝了,這意味著1.24版本之后,docker將不能作為k8s的容器運行時。docker作為云原生的基礎技術底座,如果kubernetes不再支持docker,這在互聯網IT業界都會引發不大不小的恐慌,這到底該怎么辦?是不是docker完全不能使用了?

2技術的真相

其實kubernetes只是棄用了dockershim,并不是棄用了docker的全部。docker體系中的containerd是符合CRI標準的,可以繼續作為kubernetes的容器運行時。而OCI標準的實現者runC也是docker體系的。

另一方面,docker構建的鏡像符合OCI標準,可以運行在kubernetes集群中,所以仍然可以在本地使用docker進行開發和測試。

2.1 OCI和CRI標準分別是什么?

OCI(Open Container Initiative)是一組圍繞容器技術的開放標準和規范,主要定義了容器的生命周期管理規范。OCI的實現者通常被稱為“低級容器運行時”,例如runC。低級運行時的主要功能是按照給定的容器文件系統和JSON配置文件,創建容器,并管理容器的生命周期。

CRI(Container Runtime Interface)是一組插件接口,定義了kubernetes(kubelet)與容器運行時的接口規范,實現兩者之間的解耦。通過CRI與kubernetes交互的運行時通常被稱為“高級容器運行時”。高級運行時的功能是為容器準備必要的運行環境,比如拉取鏡像、解壓鏡像并創建容器文件系統、創建容器網絡等,然后調用低級容器運行時,創建和運行容器。

2.2 kubernetes支持哪些容器運行時?

kubernetes支持任何符合CRI標準的容器運行時。在1.23版本之前,常用的容器運行時有三種:docker、containerd、cri-o.

docker

docker守護進程是不符合CRI標準的。為了支持docker作為容器運行時,kubelet內置了一個dockershim模塊,kubelet通過CRI調用dockershim,再由它轉換請求,調用docker守護進程,而1.24版本將要移除的就是這個模塊。此模式下創建容器時的調用過程如下:

  • kubelet通過CRI調用dockershim;
  • dockershim轉換請求,調用docker守護進程;
  • docker調用containerd;
  • containerd創建containerd-shim進程,再由containerd-shim調用runC完成容器創建。最終容器由containerd-shim管理,容器內所有進程都是containerd-shim的子進程。

containerd

containerd是從docker守護進程中獨立出來的容器運行時,最終也要通過runC運行容器。

在CRI標準被提出后,為了兼容CRI,減少調用開銷,containerd開發了一個守護進程,叫CRI-containerd。原先調用鏈kubelet -> dockershim -> dockerd -> containerd 被簡化成為 kubelet -> CRI-containerd -> containerd。后來,containerd干脆將CRI-containerd以CRI插件形式內建在項目中,直接通過方法調用,進一步將調用鏈簡化為 kubelet -> containerd。

cri-o

CRI標準被提出后,紅帽按照CRI開發的一個輕量級容器運行時,是CRI標準的最小實現。此模式下kubelet直接調用cri-o,再由cri-o調用runC完成容器創建和管理,調用鏈比較簡潔。

廣東公司網絡管理中心網管系統室負責建設和維護O域容器云,近期剛好啟動kubernetes 版本升級工作,借此機會,我們決定在測試環境上將容器運行時從docker遷移至cri-o,并驗證下kubernetes 1.23 -> 1.24版本升級方案,以下是遷移的部分注意事項及詳細步驟。

3遷移注意事項和詳細步驟

注意事項:

  1. 對于使用docker in docker的pod,如果是掛載宿主機的docker.sock守護進程,遷移后將不能運行,如果是在容器中安裝獨立的docker守護進程,遷移后仍然可以正常運行。
  2. /etc/docker/daemon.json中的配置需要同步到新的運行時,比如倉庫的鏡像站點。
  3. 檢查各種運維腳本,如果包含docker命令需要修改。
  4. 容器stdout/stderr日志形式變更,如果使用Fluentd或者Filebeat收集日志,需要修改配置。

① 日志目錄:使用docker時,日志通過/var/log/containers鏈接到/var/log/pods/目錄,最后鏈接到/var/lib/docker/containers/xxx/目錄,如果使用其他運行時,一般是通過/var/log/containers鏈接到/var/log/pods/目錄,由kubelet管理。

② 日志格式:使用docker時,很多人習慣設置json格式,而切換到其他運行時,默認格式是text,格式為“time stream log-info”。日志解析配置需要修改。

③ 日志回滾:使用docker時,在daemon.json配置,切換運行時后,通過kubelet的配置項containerLogMaxSize、containerLogMaxFiles設置。

怎么將kubernetes的容器運行時從docker遷移至cri-o?

  • 操作系統:centOS 7.9
  • 內核版本:5.4.178
  • kubernetes版本:1.23.3
  • cri-o:1.22.3

1. 遷移按節點進行,先驅逐pod并隔離節點

kubectl drain --delete-emptydir-data --force --ignore-daemonsets <NODE_NAME>

2. 卸載docker

systemctl stop kubelet
systemctl stop docker
systemctl disable docker
yum remove -y docker-ce
# docker數據目錄先保留一段時間,運行沒異常再刪除
rm -rf /var/lib/docker

3. 內核設置

這些設置一般在k8s安裝前都會設置,這里再確認一次,已經設置好的忽略這一步。

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter

4. 安裝cri-o

# 設置yum源
export OS=CentOS_7
export VERSION=1.22
curl -L -o
/etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/devel:kubic:libcontainers:stable.repo
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
# 安裝cri-o
yum install -y cri-o

5. 修改cri-o配置

# 查看conmon路徑
which conmon
# 修改cri-o配置文件
vi /etc/crio/crio.conf
# 修改crio.runtime表,加上conmon路徑配置
[crio.runtime]
conmon = "/usr/bin/conmon"
# 修改crio.image表,加上pause鏡像設置。xxx需要換成你的私有鏡像庫
[crio.image]
insecure_registries = ["xxx"]
pause_image = "xxx/k8s/pause:3.6"
# 修改registry配置
vi /etc/containers/registries.conf
# 添加私有鏡像庫,xxx需要替換成你的私有鏡像庫,這里設置了insecure,可按實現情況修改
# 因為我用的是私有倉庫,不需要設置鏡像站點
[[registry]]
prefix = "xxx"
insecure = true
blocked = false
location = "xxx"

6. 啟動cri-o服務

systemctl enable crio
systemctl start crio
systemctl status crio

7. 修改kubelet配置

設置kubelet命令行啟動參數,指定使用cri-o運行時。

vi /etc/sysconfig/kubelet
# 修改內容,加上以下兩個參數
KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint='unix:///var/run/crio/crio.sock'

修改 /var/lib/kubelet/kubeadm-flags.env 文件,文件中如果有以下3個參數,請刪除。

  • --cgroup-driver k8s建議在配置文件設置,不要在命令行。
  • --cni-plugin 1.24版本后會和docker-shim一起被移除。
  • --pod-infra-container-image 當使用cri-o運行時,kubelet忽略這個參數,需要在cri-o配置中指定。

修改kubelet的配置文件 /var/lib/kubelet/config.yaml,修改以下4個參數,如果參數不存在則添加上去。

設置kubelet的cgroup驅動為systemd,因為cri-o默認驅動是systemd,必須保持一致。舊版本kubelet默認驅動是cgroupfs,1.22以上才是默認systemd。

cgroupDriver: systemd

設置運行時請求超時:

runtimeRequestTimeout: 5m

容器stdout/stderr日志文件的回滾設置,按實際需求修改。

containerLogMaxSize: 100Mi
containerLogMaxFiles: 3

修改了 /var/lib/kubelet/config.yaml 文件后,建議同步修改內容到kubelet-config-1.xx configmap,1.xx是kubernetes的版本。因為集群擴容時,新節點使用這個configmap生成配置文件,這樣可以保證新舊節點配置文件一致。

kubectl edit cm -n kube-system kubelet-config-1.23

8. 啟動kubelet,查看kubelet狀態、節點狀態、pod狀態是否正常。

systemctl start kubelet
systemctl status kubelet

9. 更新kubeadm使用的cri運行時

kubeadm使用的cri運行時在node annotations中定義,需要單獨修改,否則下次使用kubeadm時會出錯,比如升級k8s版本的時候。

# 查看當前節點的kubeadm使用的cri運行時
kubectl get node <NODE_NAME> -o jsonpath='{.metadata.annotations.kubeadm\.alpha\.kubernetes\.io/cri-socket}'
# 將dokcershim修改為cri-o
kubectl annotate node <NODE_NAME> --overwrite kubeadm.alpha.kubernetes.io/cri-socket=/var/run/crio/crio.sock

10. 安裝podman

podman是一個開源的容器管理工具,命令幾乎與docker一致,可以用于替換docker。相較于docker,它不存在守護進程,因此podman避免了docker daemon引入的問題。另一方面,cri-o專注于CRI實現,沒有提供build、tag鏡像等功能,而podman和cri-o的鏡像是共享的,可以為cri-o補充鏡像管理功能。

yum install -y podman
podman info

11. 重啟服務器

docker卸載后可能還有一些配置遺留,例如iptables規則,建議重啟服務器,防止被影響。

12. 將節點重新加入集群調度。

kubectl uncordon <NODE_NAME>

到這里,第一個節點的容器運行時遷移就完成了,可以按照相同的方法再遷移其他節點。

遷移完成后就能愉快地把k8s版本升到1.24.0了。

4后記

雖然k8s已經正式移除了dockershim,但是docker+kubernetes的方案經過多年發展已經成熟,被廣泛地應用,短期內地位仍然不可撼動。開發、測試環境可以按照需求折騰,遷移容器運行時,積累實踐經驗。生產環境的話建議保持穩定,等時機成熟再遷移。

責任編輯:未麗燕 來源: 移動Labs
相關推薦

2020-12-03 18:29:30

KubernetesDocker容器

2021-06-04 05:21:19

KubernetesDocker容器

2020-12-18 09:23:41

KubernetesDocker

2017-04-05 13:24:35

互聯網

2010-08-26 09:12:33

非法DHCP

2024-01-22 12:46:00

KubernetesAPI接口

2013-08-27 16:09:10

中關村在線

2015-08-10 18:32:09

2014-03-18 14:11:07

SAPd-code

2014-05-22 09:23:33

Teradata 大數據天睿

2009-08-11 15:39:11

CCIE學習計劃

2022-01-26 11:08:07

Kubernetes容器dockershim

2024-09-30 10:11:04

2011-09-25 23:03:39

2009-06-12 16:55:10

VPN客戶端故障

2011-10-11 22:13:22

TechEd 2011云+端

2024-10-17 14:14:29

2024-06-19 15:24:31

2009-12-21 15:12:37

2014-10-22 15:07:17

點贊
收藏

51CTO技術棧公眾號

久久久国产欧美| 久久久久久久久99精品大| 精品国产乱码久久久久久闺蜜 | 午夜激情综合网| 国产一区精品| 欧美一区二区三区在线| 欧产日产国产精品视频| 在线国产精品播放| 福利片一区二区| 91免费欧美精品| 日韩不卡一二三区| 日本中文字幕片| 激情成人在线视频| av资源新版天堂在线| 久久网福利资源网站| 成人影视亚洲图片在线| 日韩福利在线| 国产精品久久久久天堂| 精品av中文字幕在线毛片| 亚洲国产另类久久精品| 粉嫩av一区二区| 99re6在线| 国产剧情在线观看一区二区| 伊人资源视频在线| 欧美一卡二卡三卡| 一区二区三区欧洲区| 国产一区二区免费电影| 91视频观看免费| 免费理论片在线观看播放老| 亚洲欧美制服另类日韩| 五月激激激综合网色播| 亚洲人成网站在线播放2019| 国产精品久久久久影院老司| 主播国产精品| 日产精品久久久一区二区福利| 亚洲自啪免费| 在线观看成人影院| 亚洲成人av片在线观看| 中文在线网在线中文| 奇米四色中文综合久久| 久久国产精品毛片| 青青草99啪国产免费| 日韩视频一区| 色综合天天色综合| 日韩精品在线看片z| 高清一区二区三区| 正在播放一区二区三区| 午夜伦欧美伦电影理论片| 成人性生交大片免费网站| 国产欧美婷婷中文| 不卡的av网站| 午夜不卡视频| 97超级碰碰碰| 国产精品综合二区| 可以在线观看的黄色| 九九精品视频在线| 韩国欧美国产1区| 加勒比一区二区三区在线| 久久久久免费精品国产| 国产一区二区中文字幕| 精精国产xxxx视频在线| 国产精品影片在线观看| 久久综合狠狠综合久久综合88| 久久五月精品中文字幕| 丁香五月网久久综合| 一区二区三区在线影院| 欧美激情精品| 国产日韩亚洲欧美在线| 日韩视频永久免费| 欧美粗暴jizz性欧美20| 中文字幕校园春色| 2020久久国产精品| 91亚洲国产成人精品一区二区三| 狠狠躁少妇一区二区三区| 精品产品国产在线不卡| 欧美日韩黄色大片| 国产欧美一区| 国产小黄视频| 高清视频欧美一级| www国产精品av| 成人美女大片| 男插女免费视频| 精品国产第一区二区三区观看体验| 久久精品国内一区二区三区水蜜桃| 又色又爽又高潮免费视频国产| 亚洲午夜精品久久久久久性色| 久久蜜桃精品| 八戒八戒神马在线电影| 成人免费观看网站| 五月天亚洲精品| 国产videos久久| 羞羞网www| 国产91色在线免费| 日韩久久一区二区| 亚洲激情播播| 男人天堂2020| 国产欧美日韩免费| 丁香五六月婷婷久久激情| 日韩免费高清| 日韩在线无毛| 国产伦精品一区二区三区视频免费| 色一情一乱一乱一91av| 激情一区二区| 97影院秋霞午夜在线观看| 日本一区高清在线视频| 亚洲精品福利资源站| 国产一区二区三区香蕉 | 无码av天堂一区二区三区| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 国产亚洲精品自拍| 浪潮av一区| 日韩电影免费观看高清完整| 欧美第一区第二区| 国产精品亚洲午夜一区二区三区| 中文字幕成在线观看| 国产黄色片免费在线观看| 久久字幕精品一区| 欧美人成在线| 麻豆久久一区| 91日韩在线| 久久av影视| 免费欧美网站| 精品久久毛片| 国产精品美女免费视频| 亚洲国产精品一区二区久久恐怖片| 欧洲亚洲一区二区三区| 日日噜噜噜夜夜爽爽狠狠视频 | 久久国产欧美精品| 日韩一区二区在线免费观看| 久久国产精品区| 成人软件在线观看| 无码少妇一区二区三区芒果| 欧美自拍视频在线观看| 色综合天天综合狠狠| 日韩国产欧美视频| 丁香六月综合| 成人18免费| 操一操视频一区| 亚洲精品久久久久久久久久久久| 成人av在线看| 欧美亚洲高清| xxxx在线视频| 中文字幕国产免费| 国产精品12| 综合网中文字幕| 亚洲一区在线观看网站| 老司机精品福利视频| 一级毛片精品毛片| 国产中文字幕在线观看| 日韩xxxx视频| 国产精品福利网| 精品国产免费一区二区三区四区| 久久亚洲精精品中文字幕早川悠里| 香蕉久久精品| 毛片在线导航| 97视频网站| 日本一区二区在线视频| 九九久久久久99精品| 日韩欧美精品中文字幕| 久久99精品久久久| 日韩伦理一区二区三区| 怡红院在线播放| 国产日韩欧美视频在线| 欧美精品一区二区精品网| 亚洲国产高清不卡| 日韩精品亚洲专区| 国产精品欧美在线观看| 亚洲风情在线资源| 欧美伦理影视网| 亚洲国产精品久久久久爰色欲| 成人在线免费网站| 久久久这里只有精品视频| 91精品国产色综合久久| 国产精品久线观看视频| 麻豆久久婷婷| 伦理一区二区| 国产美女精品写真福利视频| 精品美女调教视频| 正在播放一区二区三区| 国产视频999| 欧美xxxx14xxxxx性爽| 日韩视频在线你懂得| 亚洲精品成a人| 成人激情黄色小说| 香蕉国产精品偷在线观看不卡| 里番精品3d一二三区| 一二三四视频在线中文| 91在线播放网站| 理论片播放午夜国外| 日韩久久久久久久久久久久| 国产精品一区二区在线观看| 日韩免费黄色av| 欧美成人精品一区二区| 亚洲成人av片在线观看| 色综合色综合色综合| ㊣最新国产の精品bt伙计久久| 国产激情偷乱视频一区二区三区| 国产日韩1区| 极品av少妇一区二区| 日本电影一区二区|