使用 Kubernetes 对容器进行编排成为微服务时代的技术风向标。
2022-07
- (07-31)「更新」系统参数配置相关内容;
2020-08
- (08-12)「初始」版本;
配置 CRI
新版的 Kubernetes 新增了一个 CRI 配置工具 crictl
,使用此工具可以检测和配置 CRI 相关资源。
配置 CRI 接口
默认情况下 crictl 会自动检测后端使用的是何种引擎,以 v1.24 版本为例,使用 containerd
作为后端进行配置:
配置 runtime-endpoint
和 image-endpoint
和延时
sudo crictl config --set runtime-endpoint=unix:///run/containerd/containerd.sock
sudo crictl config --set image-endpoint=unix:///run/containerd/containerd.sock
sudo crictl config --set timeout=2
命令会将配置写入 /etc/crictl.yaml
,如果不配置会在执行命令时看到以下报错:
WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
ERRO[0000] unable to determine image API version: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory"
配置自动补全
为了方便使用,配置命令自动补全:
crictl completion bash | sudo tee /etc/bash_completion.d/crictl
需要退出终端重新登陆才能生效。
常用命令
crictl
命令与 docker
命令使用方法类似,大部分可直接进行替换。比如:
## 查看镜像列表
sudo crictl images
## 查看容器列表
sudo crictl pods
## 查看容器资源使用状态
sudo crictl stats
中国大陆下载镜像
由于众所周知的原因,官方的镜像仓库地址在大陆无法访问,但可以使用阿里云的「容器镜像服务 ACR 」、腾讯云的「容器镜像服务 TCR 」或亚马逊「弹性容器注册 ECR 」的进行“中转”。
创建命名空间
以阿里云为例,首先需要创建阿里云的镜像仓库命名空间,这个命名空间是为了区分唯一用户的。可以随便取,建议简洁一些。
创建镜像仓库
然后需要创建镜像仓库,仓库即对应一个镜像名称。
小贴士:注意建议将「仓库名称」直接命名为实际需要的镜像名称,比如 kube-apiserver
仓库类型根据需求进行选择,私有仓库需要登录操作才能拉取。
海外上传镜像
需要先找到一个可以正常连接 k8s.io
仓库的服务器,比如可以使用阿里云的「轻量应用服务器 SAS」 非大陆服务器(推荐香港和新加坡)。
然后使用命名查询所需镜像名称和版本
$ kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.24.3
k8s.gcr.io/kube-controller-manager:v1.24.3
k8s.gcr.io/kube-scheduler:v1.24.3
k8s.gcr.io/kube-proxy:v1.24.3
k8s.gcr.io/pause:3.7
k8s.gcr.io/etcd:3.5.3-0
k8s.gcr.io/coredns/coredns:v1.8.6
从2023年9月13日开始,原仓库k8s.gcr.io
废弃,使用新地址registry.k8s.io
,详情参考 Announcement。
如果看到以下报错
failed to pull image "k8s.gcr.io/kube-apiserver:v1.24.3": output: E0727 15:31:44.603425 30260 remote_image.go:218] "PullImage from image service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService" image="k8s.gcr.io/kube-apiserver:v1.24.3"
time="2022-07-27T15:31:44+08:00" level=fatal msg="pulling image: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService"
, error: exit status 1
To see the stack trace of this error execute with --v=5 or higher
因为 1.24.x 版本修改了 CRI 导致,需要执行命令
sudo sed -i '/disabled_plugins/s/^\(.*\)$/#\1/g' /etc/containerd/config.toml
然后正常拉取上述镜像,再上传到阿里云的私有镜像仓库,以下选取其中一个为例。
docker image pull registry.k8s.io/kube-apiserver:v1.x.x
修改标签
docker image tag registry.k8s.io/kube-apiserver:v1.x.x registry.cn-beijing.aliyuncs.com/vndroid/kube-apiserver:v1.x.x
登录私有仓库
docker login --username=example@mail.com registry.cn-beijing.aliyuncs.com
小贴士:上述命名可以随便进入一个仓库中,即可查看到具体的信息。用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
推送到私有仓库
docker push registry.cn-beijing.aliyuncs.com/vndroid/kube-apiserver:v1.x.x
小贴士:如果提示无法找到主机等问题,是因为 DNS 问题,请在 /etc/resolv.conf
中加入阿里云 DNS '223.5.5.5' 即可。
其他镜像也都是同理,修改标签后推送,推送后即可到版本仓库中看到已经推送上来的版本。下图为旧版示例图,仅供参考。
注意:上述的操作因 CRI 的不同,可能需要根据实际情况替换 docker 命令为 crictl ,后面不再赘述。
部署 Helm 仓库
Helm 为一个公有 Kubernetes 仓库,可以方便管理和控制版本发行,安装手册可见官网文档。
安装
同其他软件一样,官方提供了多种部署方法,根据需求和环境自行选择。
二进制安装(推荐)
- 从官方 GitHub 中下载二进制包,根据架构下载,常见服务器都选择 Linux amd64。
解压二进制包
tar xf helm-v3.x.x-linux-amd64.tar.gz
将程序安装到系统 $PATH 目录
sudo install -m 755 linux-amd64/helm /usr/local/bin/helm
仓库方式
常见发行版可选此种方式(Ubuntu, CentOS, Debian 等)。
sudo apt install curl gnupg
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/helm.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt update
sudo apt install helm
配置自动补全
helm completion bash | sudo tee /etc/bash_completion.d/helm
验证
安装后验证程序是否正常执行
helm help
可以正常显示帮助信息,没有报错即为安装成功。
附录
相关链接
- 从零开始的 Kubernetes 学习笔记(一) - VVavE
- 从零开始的 Kubernetes 学习笔记(二) - VVavE
- 从零开始的 Kubernetes 学习笔记(四) - VVavE
- 从零开始的 Kubernetes 学习笔记(五) - VVavE
参考链接
- deploy kubernetes cluster on debian 11 with containerd - hostafrica
- containerd - GitHub
- Container Runtime Interface (CRI) CLI - GitHub
- Changing the Container Runtime on a Node from Docker Engine to containerd - kubernetes
- Kubernetes Removals and Deprecations In 1.24 - kubernetes Blog
- Debugging Kubernetes nodes with crictl - kubernetes
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-09-08 16:29 PM