<em id="fzvj9"><form id="fzvj9"><nobr id="fzvj9"></nobr></form></em>

      <sub id="fzvj9"><listing id="fzvj9"></listing></sub>
        <address id="fzvj9"><nobr id="fzvj9"><nobr id="fzvj9"></nobr></nobr></address>

            <form id="fzvj9"><nobr id="fzvj9"><meter id="fzvj9"></meter></nobr></form>

            <form id="fzvj9"></form>

            • 自動秒收錄
            • 軟件:1973
            • 資訊:56511|
            • 收錄網站:199641|

            IT精英團

            Kubernetes拋棄Docker 不要慌!這里有一套實用的方法告訴你~

            Kubernetes拋棄Docker 不要慌!這里有一套實用的方法告訴你~

            瀏覽次數:
            評論次數:
            編輯: 陽煦
            信息來源: ITPUB
            更新日期: 2022-06-07 21:07:01
            摘要

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

            • 正文開始
            • 相關閱讀
            • 推薦作品

            導讀

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

            作者簡介

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

            1、前言

            前段時間Kubernetes推出了1.24版本,曾經轟動一時的Docker被拋棄,正式安裝。這意味著1.24版本之后,Docker將無法作為k8s的容器運行。

            Docker是云的基礎技術基礎。如果Kubernetes不再支持Docker,將會在互聯網IT行業引起適度的恐慌。我們做什么呢Docker是不是完全不能用了?

            2、技術的真相

            事實上,Kubernetes只是拋棄了dockershim,而不是Docker的全部。Docker系統中包含的是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 版本將要移除的就是這個模塊。此模式下創建容器時的調用過程如下:

            1. Kubelet 通過 CRI 調用 dockershim

            2. dockershim 轉換請求,調用 docker 守護進程

            3. docker 調用 containerd

            4. 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 設置。

            5、其他注意點參考官網FAQ文檔:

            https://kubernetes.io/zh/blog/2022/02/17/dockershim-faq/

            怎么將 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 kubeletsystemctl stop dockersystemctl disable docker
            yum remove -y docker-ce
            # docker數據目錄先保留一段時間,運行沒異常再刪除
            rm -rf /var/lib/docker

            3、內核設置

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

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

            4、安裝 cri-o

            # 設置yum源export OS=CentOS_7export VERSION=1.22curl -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.repocurl -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-oyum 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 = trueblocked = falselocation = "xxx"

            6、啟動 cri-o 服務

            systemctl enable criosystemctl 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: 100MicontainerLogMaxFiles: 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 kubeletsystemctl status kubelet

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

            # 查看當前節點的kubeadm使用的cri運行時kubectl get node <NODE_NAME> -o jsonpath='{.metadata.annotations.kubeadm\.alpha\.kubernetes\.io/cri-socket}'# 將dokcershim修改為cri-okubectl 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 podmanpodman info

            11、重啟服務器

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

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

            kubectl uncordon <NODE_NAME>

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

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

            4 后記

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

            標簽:容器 鏡像 節點
            老生常談:如何在MySQL中查找數據
            ? 上一篇 2022-06-07
            • 老生常談:如何在MySQL中查找數據
              0閱讀 0條評論 個贊
              頁的組成部分數據庫中表的數據被劃分為若各個頁(page),每個頁中又存儲了很多行記錄,而我們往MySQL中插入的每行記錄就放到頁當中的行記錄中,InnoDB的頁分為以下幾個部分InnoDB頁InnoD……
            • 他山之石|查詢理解在美團搜索中的應用
              0閱讀 0條評論 個贊
              作者|劉亮美團資深算法工程在過去的20年中,搜索過程中處理查詢的方式以及向用戶顯示結果的方式已完全改變。該過程已經從僅基于文本匹配的檢索發展到現階段——嘗試基于對查詢的真實語義理解以及上下文,位置,時……
            • 寫Python腳本 一定要加這個!
              1閱讀 0條評論 個贊
              以下文章來源于公眾號-Python技術,作者派森醬大家好,使用Python的人,平時經常會寫一些腳本,不管是為了提升工作效率,還是為了滿足一些特定的需求,Python腳本都是一個常見又有用的東西……
            • 本文討論了密碼算法在Linux內核中的設計和應用
              1閱讀 0條評論 個贊
              文|baron出品|Linux閱碼場(ID:gh_28254f84d698)作者簡介:baron(csdn:代碼改變世界ctw),九年手機安全/SOC底層安全開發經驗。擅長trustzone/……
            • 架構進化 本文終于說清楚了~
              1閱讀 0條評論 個贊
              相信大家都聽說過單體和我服務,那么,單體到微服務架構的數據是如何演進的呢?這是個有意思的話題。今天,我們一起來看看,希望大家都有收獲和啟發。京東白條的快速發展滿足了當前人們日益增長的消費需求。在京東商……
            發表評論 共有條評論
            用戶名: 密碼:
            驗證碼: 匿名發表
            • MYSQL如果索引優化僅僅是添加索引 太年輕而不簡單
              1閱讀 0條評論 個贊
              MYSQL的索引優化,如果此時此刻看到索引的優化,僅僅想到添加適合的索引,是不完全的,索引的優化本身就具有很多的不確定性。1索引會隨著時間的推移,有性能的衰減2索引會隨著數據量的增加,有性能的衰……
            • 重溫SQL Server的行到列和列到列的變化 并采訪常見問題
              1閱讀 0條評論 個贊
              行轉列,列轉行是我們在開發過程中經常碰到的問題。行轉列一般通過CASEWHEN語句來實現,也可以通過SQLSERVER的運算符PIVOT來實現。用傳統的方法,比較好理解。層次清晰,而且比較習……
            • 碼頭工人常見問題處理技巧
              1閱讀 0條評論 個贊
              本文列舉Docker常見問題24個及解決方法:▍1.Docker遷移存儲目錄默認情況系統會將Docker容器存放在/var/lib/docker目錄下[問題起因]今天通過監控系統,發現公……
            • 高可用性架構設計的無狀態服務
              2閱讀 0條評論 個贊
              笑談架構設計事故的發生是量的積累的結果,任何事情都沒有表面看起來那么簡單,在軟件運行的過程中,隨著用戶量的增加,不考慮高可用,遲早有一天會發生故障,不得事先考慮高可用設計,而高可用是一門龐大的學問。在……
            • 為什么數據治理是端到端的?
              1閱讀 0條評論 個贊
              編輯:彭文華來源:大數據架構師彭友們好,我是老彭啊。今天有個彭友問我:數據中臺里也有數據治理的很多功能,是不是就可以直接替代數據治理這件事情了?唉...市場上有些數據治理的概念很小,小到什么程度呢?……
            • 如何保證MySQL和Redis的數據一致性?
              1閱讀 0條評論 個贊
              以下文章來源于公眾號-樓仔,作者樓仔我直接先拋一下結論:在滿足實時性的條件下,不存在兩者完全保存一致的方案,只有最終一致性方案。根據網上的眾多解決方案,總結出6種,直接看目錄:不好的方案1.先……
            • MySQL查詢語句的準備階段是什么?
              1閱讀 0條評論 個贊
              以下文章來源于公眾號--一樹一溪,作者一樹一溪這一篇主要講的內容是一條簡單查詢語句,在查詢準備階段會干哪些事情?分3個部分:打開表select*替換為表字段填充where條件示例表及SQ……
            • 嵌入式系統登錄的簡單方法
              3閱讀 0條評論 個贊
              來源|我姓梁很多場景都需要記錄日志,在嵌入式系統中,特別是單片機這種存儲資源有限的環境下,就需要一種輕量級的存儲方法。系統日志在嵌入式設備應用場景中,系統日志時??梢员O控設備軟件的運行狀態,及時記錄……
            • 內存數據庫如何利用內存?
              1閱讀 0條評論 個贊
              與以磁盤存儲為主的普通數據庫相比,內存數據庫的數據訪問速度可以高出幾個數量級,能大幅提高運算性能,更適合高并發、低延時的業務場景。不過,當前大部分內存數據庫仍然采用SQL模型,而SQL缺乏一些……
            • 如何正確創建和銷毀Java對象?
              16閱讀 0條評論 個贊
              一、介紹Java由SunMicrosystems發明并在1995年發布,是世界上使用最廣泛的編程語言之一。Java是一個通用編程語言。由于它擁有功能強大的庫、運行時、簡單的語法、平臺無關(Write……
            • 記得網上一個K8s Ingress訪問故障排除 最后卻不是帖子的鍋
              1閱讀 0條評論 個贊
              具體現象應用遷移至我們的PaaS平臺后會出現偶發性的502問題,錯誤見圖片:相比于程序的請求量,錯誤肯定是比較少的,但是錯誤一直在發生,會影響調用方的代碼,需要檢查下問題原因。為啥我們只看到了POST……
            • 有效的數據治理 如何管理元數據?
              5閱讀 0條評論 個贊
              本期作者沈汪洋嗶哩嗶哩資深開發工程師負責B站數據平臺工具側元數據、數據運營、數據管理等業務方向,專注于元數據采集、血緣應用、數據地圖、建模工具、治理工具等工具或產品功能的落地和推廣。背景介紹元數據是數……
            • 前端面試必須解決網絡中的跨域問題
              10閱讀 0條評論 個贊
              什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
            • 記得保命!捕捉Linux下的所有高危命令!
              1閱讀 0條評論 個贊
              1、rm-rf命令該命令可能導致不可恢復的系統崩壞。>rm-rf/#強制刪除根目錄下所有東西。>rm-rf*#強制刪除當前目錄的所有文件。>rm-rf.#強制刪除當前……
            • SQL Server實現行列轉換
              0閱讀 0條評論 個贊
              工作中經常需要查詢一些數據,需要寫sql語句來寫報表。最近就在業務中使用到了轉置,現在已經不再使用case方式了,而是使用sqlserver內置的pivot函數來實現轉置。業務很邏輯,需要從多個表中……
            • 為什么C的singleton模式不直接使用static 而必須實例化一個對象?
              1閱讀 0條評論 個贊
              以下文章來源于公眾號-編程往事,作者果凍蝦仁開場前段時間在知乎回答了這樣一個問題:為什么C++單例模式不能直接全部使用static變量和static函數呢?如果全部使用static的話,是不是也……
            • Linux程序編譯過程的來龍去脈
              1閱讀 0條評論 個贊
              大家肯定都知道計算機程序設計語言通常分為機器語言、匯編語言和高級語言三類。高級語言需要通過翻譯成機器語言才能執行,而翻譯的方式分為兩種,一種是編譯型,另一種是解釋型,因此我們基本上將高級語言分為兩大類……
            • 運維入坑必看:Kubernetes平臺架構解讀
              1閱讀 0條評論 個贊
              Kubernetes是一個開源容器編排平臺,管理大規模分布式容器化軟件應用,是云計算發展演進的一次徹底革命性的突破。Kubernetes是谷歌的第三代容器管理系統,是Borg獨特的控制器和Omega靈……
            • 對八種架構“設計模式”的詳細討論以及它們的優缺點的概述
              1閱讀 0條評論 個贊
              什么是架構我想這個問題,十個人回答得有十一個答案,因為另外的那一個是大家妥協的結果。哈哈,我理解,架構就是骨架,如下圖所示:人類的身體的支撐是主要由骨架來承擔的,然后是其上的肌肉、神經、皮膚。架構對于……
            • 架構進化 本文終于說清楚了~
              1閱讀 0條評論 個贊
              相信大家都聽說過單體和我服務,那么,單體到微服務架構的數據是如何演進的呢?這是個有意思的話題。今天,我們一起來看看,希望大家都有收獲和啟發。京東白條的快速發展滿足了當前人們日益增長的消費需求。在京東商……
            最近發布資訊
            更多
            风流少妇大战洋吊

            <em id="fzvj9"><form id="fzvj9"><nobr id="fzvj9"></nobr></form></em>

                <sub id="fzvj9"><listing id="fzvj9"></listing></sub>
                  <address id="fzvj9"><nobr id="fzvj9"><nobr id="fzvj9"></nobr></nobr></address>

                      <form id="fzvj9"><nobr id="fzvj9"><meter id="fzvj9"></meter></nobr></form>

                      <form id="fzvj9"></form>