从零开始的 Kubernetes 学习笔记(三)

后知后觉 暂无评论

使用 Kubernetes 对容器进行编排成为微服务时代的技术风向标。

2022-07

2020-08


配置 CRI

新版的 Kubernetes 新增了一个 CRI 配置工具 crictl,使用此工具可以检测和配置 CRI 相关资源。

配置 CRI 接口

默认情况下 crictl 会自动检测后端使用的是何种引擎,以 v1.24 版本为例,使用 containerd 作为后端进行配置:

配置 runtime-endpointimage-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 」的进行“中转”。

创建命名空间

以阿里云为例,首先需要创建阿里云的镜像仓库命名空间,这个命名空间是为了区分唯一用户的。可以随便取,建议简洁一些。

创建命名空间(!AVIF)

创建镜像仓库

然后需要创建镜像仓库,仓库即对应一个镜像名称。

创建镜像仓库(!AVIF)

小贴士:注意建议将「仓库名称」直接命名为实际需要的镜像名称,比如 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' 即可。

其他镜像也都是同理,修改标签后推送,推送后即可到版本仓库中看到已经推送上来的版本。下图为旧版示例图,仅供参考。

镜像版本(!AVIF)

注意:上述的操作因 CRI 的不同,可能需要根据实际情况替换 docker 命令为 crictl ,后面不再赘述。

部署 Helm 仓库

Helm 为一个公有 Kubernetes 仓库,可以方便管理和控制版本发行,安装手册可见官网文档

安装

同其他软件一样,官方提供了多种部署方法,根据需求和环境自行选择。

二进制安装(推荐)

  1. 官方 GitHub 中下载二进制包,根据架构下载,常见服务器都选择 Linux amd64。
  2. 解压二进制包

    tar xf helm-v3.x.x-linux-amd64.tar.gz
  3. 将程序安装到系统 $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

可以正常显示帮助信息,没有报错即为安装成功。


附录

相关链接

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。