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

          一款小工具,將Docker使用體驗(yàn)復(fù)制粘貼到Containerd

          共 14956字,需瀏覽 30分鐘

           ·

          2021-10-30 09:50

          作者簡(jiǎn)介

          王海龍,Rancher中國(guó)社區(qū)技術(shù)經(jīng)理,負(fù)責(zé)Rancher中國(guó)技術(shù)社區(qū)的維護(hù)和運(yùn)營(yíng)。擁有7年的云計(jì)算領(lǐng)域經(jīng)驗(yàn),經(jīng)歷了OpenStack到Kubernetes的技術(shù)變革,無論底層操作系統(tǒng)Linux,還是虛擬化KVM或是Docker容器技術(shù)都有豐富的運(yùn)維和實(shí)踐經(jīng)驗(yàn)。


          自從 Kubernetes 宣布在 v1.20 之后棄用 Docker 作為容器運(yùn)行時(shí),而改用 containerd 之后,大家對(duì) containerd 的關(guān)注度越來越高。近些年 CNCF 社區(qū)一直在不斷完善 containerd,其定位也發(fā)生了改變,由原來的系統(tǒng)嵌入組件,變成了今天的“工業(yè)級(jí)標(biāo)準(zhǔn)的容器運(yùn)行時(shí)”。


          而對(duì)于我們習(xí)慣使用的 Docker CLI 的用戶來說,Containerd 雖然提供的 CLI( ctr 和 crictl ),但使用體驗(yàn)并不友好,因?yàn)樗鼰o法像 Docker 一樣去全生命周期地管理容器。


          還好,另外一個(gè)命令行工具項(xiàng)目 nerdctl 可供我們選擇。nerdctl 是一個(gè)與 Docker CLI 風(fēng)格兼容的 containerd 的 CLI 工具,使用體驗(yàn)和 Docker 基本一致。 


          目前,nerdctl 已經(jīng)作為子項(xiàng)目加入了 containerd 項(xiàng)目,它的 github 地址是 :

          https://github.com/containerd/nerdctl


          Nerdctl 基本涵蓋了 Docker CLI 的所有功能,同時(shí),它還實(shí)現(xiàn)了很多 Docker 中不具備的功能,比如:延遲拉取鏡像(lazy-pulling)、鏡像加密(imgcrypt)等。


          K3s 默認(rèn)使用 containerd 作為容器運(yùn)行時(shí),下文將給大家介紹如何在 K3s 中使用 nerdctl 輕松管理容器。


          安裝 K3s

          root@k3s:~# curl -sfL https://get.k3s.io | sh -[INFO]  Finding release for channel stable[INFO]  Using v1.21.5+k3s1 as release[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.21.5+k3s1/sha256sum-amd64.txt[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.21.5+k3s1/k3s[INFO]  Verifying binary download[INFO]  Installing k3s to /usr/local/bin/k3s[INFO]  Creating /usr/local/bin/kubectl symlink to k3s[INFO]  Creating /usr/local/bin/crictl symlink to k3s[INFO]  Creating /usr/local/bin/ctr symlink to k3s[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service[INFO]  systemd: Enabling k3s unitCreated symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.[INFO]  systemd: Starting k3s


          安裝并配置 Nerdctl


          從 nerdctl 的 release(https://github.com/containerd/nerdctl/releases) 中下載二進(jìn)制文件,然后將 nerdctl 移動(dòng)到/usr/local/bin 下即可完成安裝。


          因?yàn)樯弦徊桨惭b的 K3s 中已經(jīng)包含了 containerd,所以只需要下載 nerdctl---.tar.gz 即可,否則需要安裝 nerdctl-full---.tar.gz


          如果要使用 nerdctl 管理 K3s 環(huán)境中的容器,還需要手動(dòng)指定 containerd socket


          root@k3s:~# export CONTAINERD_ADDRESS="unix:///run/k3s/containerd/containerd.sock"


          接下來,就可以使用 nerdctl 來查詢 K3s 中的容器了:


          root@k3s:~# nerdctl -n k8s.io psCONTAINER ID    IMAGE                                                                                                               COMMAND                   CREATED           STATUS    PORTS    NAMES19a2751ecaf2    docker.io/rancher/pause:3.1                                                                                         "/pause"                  24 minutes ago    Up1fb15a152a65    docker.io/rancher/coredns-coredns:1.8.3                                                                             "/coredns -conf /etc…"    24 minutes ago    Up3005a774e1c1    docker.io/rancher/library-traefik:2.4.8                                                                             "/entrypoint.sh --gl…"    23 minutes ago    Up364c9f6a7a5a    docker.io/rancher/pause:3.1                                                                                         "/pause"                  24 minutes ago    Up46aac7428aec    docker.io/rancher/klipper-lb:v0.2.0                                                                                 "entry"                   23 minutes ago    Up6442944d5514    docker.io/rancher/pause:3.1                                                                                         "/pause"                  23 minutes ago    Up6f2a5e9a955c    docker.io/rancher/local-path-provisioner@sha256:9666b1635fec95d4e2251661e135c90678b8f45fd0f8324c55db99c80e2a958c    "local-path-provisio…"    24 minutes ago    Up758b0400700f    docker.io/rancher/klipper-lb:v0.2.0                                                                                 "entry"                   23 minutes ago    Up808fdd380c8b    docker.io/rancher/pause:3.1                                                                                         "/pause"                  24 minutes ago    Up8421cc3f260d    docker.io/rancher/pause:3.1                                                                                         "/pause"                  23 minutes ago    Upc16c1a7560e8    docker.io/rancher/metrics-server:v0.3.6                                                                             "/metrics-server"         24 minutes ago    Uproot@k3s:~#


          通過 nerdctl 創(chuàng)建容器


          如果要使用 nerdctl 創(chuàng)建容器,需要提前配置 CNI Plugins:


          root@k3s:~# mkdir -p /opt/cni/binroot@k3s:~# wget -c https://github.com/containernetworking/plugins/releases/download/v1.0.1/cni-plugins-linux-amd64-v1.0.1.tgz  -O - |  tar -xz -C /opt/cni/bin/


          使用 nerdctl 運(yùn)行容器:


          root@k3s:~# nerdctl run -d --name nginx -p 8000:80 nginx:alpinedocker.io/library/nginx:alpine:                                                   resolved       |++++++++++++++++++++++++++++++++++++++|index-sha256:686aac2769fd6e7bab67663fd38750c135b72d993d0bb0a942ab02ef647fc9c3:    done           |++++++++++++++++++++++++++++++++++++++|manifest-sha256:af466e4f12e3abe41fcfb59ca0573a3a5c640573b389d5287207a49d1324abd8: done           |++++++++++++++++++++++++++++++++++++++|config-sha256:513f9a9d8748b25cdb0ec6f16b4523af7bba216a6bf0f43f70af75b4cf7cb780:   done           |++++++++++++++++++++++++++++++++++++++|elapsed: 4.8 s                                                                    total:  3.1 Ki (669.0 B/s)4dbc8925dcb69082c9a4c9959853280a9154d2b42cbbf4ce3bdb846b955d34c1


          查看創(chuàng)建的容器:


          root@k3s:~# nerdctl psCONTAINER ID    IMAGE                             COMMAND                   CREATED               STATUS    PORTS                   NAMES4dbc8925dcb6    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    About a minute ago    Up        0.0.0.0:8000->80/tcp    nginx


          Build 鏡像


          Nerdctl 構(gòu)建鏡像需要結(jié)合 buildkit (https://github.com/moby/buildkit),所以,我們需要先安裝并啟動(dòng) buildkit:


          root@k3s:~# wget -c https://github.com/moby/buildkit/releases/download/v0.9.0/buildkit-v0.9.0.linux-amd64.tar.gz -O - |  tar -xz -C /usr/local/root@k3s:~# buildkitd --containerd-worker-addr="/run/k3s/containerd/containerd.sock" --oci-worker=false --containerd-worker=true &


          接下來,我們就可以使用 nerdctl 構(gòu)建容器鏡像:


          root@k3s:~# nerdctl build -t "nginx:t1" .[+] Building 7.6s (4/6)[+] Building 7.9s (4/6)[+] Building 8.2s (4/6)[+] Building 8.4s (4/6)[+] Building 9.1s (4/6)[+] Building 9.5s (4/6)[+] Building 14.6s (7/7) FINISHED => [internal] load build definition from Dockerfile                                                                                                                         0.1s => => transferring dockerfile: 93B                                                                                                                                          0.0s => [internal] load .dockerignore                                                                                                                                            0.0s => => transferring context: 2B                                                                                                                                              0.0s => [internal] load metadata for docker.io/library/nginx:alpine                                                                                                              6.4s => [internal] load build context                                                                                                                                            0.1s => => transferring context: 652B                                                                                                                                            0.0s => [1/2] FROM docker.io/library/nginx:alpine@sha256:686aac2769fd6e7bab67663fd38750c135b72d993d0bb0a942ab02ef647fc9c3                                                        4.2s => => resolve docker.io/library/nginx:alpine@sha256:686aac2769fd6e7bab67663fd38750c135b72d993d0bb0a942ab02ef647fc9c3                                                        0.1s => => sha256:61074acc7dd227cfbeaf719f9b5cdfb64711bc6b60b3865c7b886b7099c15d15 0B / 1.39kB                                                                                   7.3s => => sha256:969825a5ca61c8320c63ff9ce0e8b24b83442503d79c5940ba4e2f0bd9e34df8 0B / 663B                                                                                     7.3s => => sha256:3e72c40d0ff43c52c5cc37713b75053e8cb5baea8e137a784d480123814982a2 0B / 891B                                                                                     7.2s => => sha256:c1368e94e1ec563b31c3fb1fea02c9fbdc4c79a95e9ad0cac6df29c228ee2df3 0B / 602B                                                                                     7.3s => => sha256:a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e 2.81MB / 2.81MB                                                                               6.9s => => sha256:4dd4efe90939ab5711aaf5fcd9fd8feb34307bab48ba93030e8b845f8312ed8e 6.29MB / 7.15MB                                                                               6.7s => => extracting sha256:a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e                                                                                    0.7s => => extracting sha256:4dd4efe90939ab5711aaf5fcd9fd8feb34307bab48ba93030e8b845f8312ed8e                                                                                    1.4s => => extracting sha256:c1368e94e1ec563b31c3fb1fea02c9fbdc4c79a95e9ad0cac6df29c228ee2df3                                                                                    0.0s => => extracting sha256:3e72c40d0ff43c52c5cc37713b75053e8cb5baea8e137a784d480123814982a2                                                                                    0.0s => => extracting sha256:969825a5ca61c8320c63ff9ce0e8b24b83442503d79c5940ba4e2f0bd9e34df8                                                                                    0.0s => => extracting sha256:61074acc7dd227cfbeaf719f9b5cdfb64711bc6b60b3865c7b886b7099c15d15                                                                                    0.0s => [2/2] ADD index.html /usr/share/nginx/html/                                                                                                                              0.3s => exporting to oci image format                                                                                                                                            2.8s => => exporting layers                                                                                                                                                      0.4s => => exporting manifest sha256:b9bd561041b26c433f0d556c9b14496a543746cc6ffceaa5d86efcaae8fd60e3                                                                            0.0s => => exporting config sha256:016a6b9885092667ab5418dbad43f3d1ac35056452431fe8d1a4b0e895ad76f3                                                                              0.0s => => sending tarball                                                                                                                                                       2.4sunpacking docker.io/library/nginx:t1 (sha256:b9bd561041b26c433f0d556c9b14496a543746cc6ffceaa5d86efcaae8fd60e3)...done


          查看構(gòu)建鏡像:


          root@k3s:~# nerdctl imagesREPOSITORY    TAG       IMAGE ID        CREATED              SIZEnginx         alpine    686aac2769fd    About an hour ago    26.0 MiBnginx         t1        b9bd561041b2    2 minutes ago        26.0 MiB


          總  結(jié)


          實(shí)際上,nerdctl 的使用方式和 Docker CLI 幾乎一致,我們可以輕松從 Docker 過渡到 nerdctl+containerd。如果你是因?yàn)榱?xí)慣了 docker cli 才在 K3s 集群中使用 Docker 容器運(yùn)行時(shí)的話,那么現(xiàn)在借助 nerdctl 管理 containerd 也許是更好的選擇。


          本文只是給大家 demo 了如何在 K3s 中借助 nerdctl 管理本地容器,如果你使用的是 RKE2 集群,你也可以參考本文的說明來在 RKE2 集群中使用 nerdctl 來管理 containerd。




          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ù)已超過 17,000,成為了開源社區(qū)最受歡迎的邊緣計(jì)算 K8S 解決方案。截至目前,K3s全球下載量超過100萬次,每周平均被安裝超過2萬次,其中30%的下載量來自中國(guó)。


          k3s 專為在資源有限的環(huán)境中運(yùn)行 Kubernetes 的研發(fā)和運(yùn)維人員設(shè)計(jì),將滿足日益增長(zhǎng)的在邊緣計(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

          瀏覽 185
          點(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>
                  九色一区 | 国产av最新福利 国产jk在线观看 | 麻豆久久成人 | 操逼操无码 | 婷婷激情五月 |