3

光速上手k8s(2023)(containerd)(未完待续) - Ctrl+c_Ctrl+v程序员

 1 year ago
source link: https://www.cnblogs.com/Ctrl-cCtrl-v/p/17030193.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

又过了好久没写了,主要是近来状况也无聊

一、了解概念(参考

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。

Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。

Pod的概念

在K8S中,调度的最小是Pod,一个Pod中可以运行一个或者多个容器。在一个集群中,K8S会为每个Pod都分配一个集群内唯一的IP地址。因为K8S要求底层网络支持集群内的任意节点之间的两个Pod能够直接通信。这些容器共享当前Pod的文件系统和网络。而这些容器之所以能够共享,是因为Pod中有一个叫Pause的根容器,其余的用户业务容器都是共享这个根容器的IP和Volume。所以这些容器之间都可以通过localhost进行通信。

二、安装(参考

kubernetes的国外安装其实非常简单,国内安装的主要问题在于kubernetes部件所需的官方镜像在 http://gcr.io(Google Cloud Container Registry)上,很不幸,这个网站被墙了。

添加key

下载这个,有梯子的话也可以直接 sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - 

没有梯子的,下载好之后

sudo apt-key add ./apt-key.gpg
sudo apt-get update
sudo nano /etc/apt/sources.list.d/kubernetes.list

添加 deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main 

sudo apt-get update
sudo apt install kubelet kubernetes-cni kubeadm docker.io

验证k8s是否安装好即可,直接敲kubectl + 回车。

关闭swap

  • 暂时关闭 直接使用命令 sudo swapoff -a ,但是重启之后会失效。会导致k8s无法正常运行。
  • 永久关闭  sudo vim /etc/fstab 将有swap.img那行注释掉,保存即可。

三、初始化Master节点

 设置HostName

修改主机名

sudo hostnamectl set-hostname master-node

 初始化

方法一(推荐):

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

 使用镜像:

kubeadm init --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers" --pod-network-cidr=10.244.0.0/16

忽略一些报错:

sudo kubeadm init --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers" --pod-network-cidr=10.244.0.0/16  --ignore-preflight-errors=SystemVerification --ignore-preflight-errors=Mem

首先 kubeadm config images list ,然后新建一个sh文件,内容:

images=(  # 下面的镜像应该去除"k8s.gcr.io/"的前缀,版本换成上面获取到的版本
    #你刚刚获取的
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

目前最大问题(参考

日志: "command failed" err="failed to run Kubelet: validate service connection: CRI v1 runtime API is not implemented for endpoint \"> 

似乎与K8s 1.26中的这个变化有关。 解决方案是安装 containerd 1.6,但是......似乎还没有 APT 包

通过下载和替换二进制文件手动将 containerd 升级到 1.6 或更高版本

wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-amd64.tar.gz
tar xvf containerd-1.6.12-linux-amd64.tar.gz
systemctl stop containerd
cd bin
cp * /usr/bin/
systemctl start containerd

其他节点的加入

命令执行完成之后,会打印一个有kubeadm join的命令,需要保存下来。

大概长这样。

kubeadm join 你的IP地址:6443 --token 你的TOKEN --discovery-token-ca-cert-hash sha256:你的CA证书哈希

token是有时效性的,过期时间一般是86400000毫秒(一天)

记亿些我遇到的问题

① /var/run/containerd/containerd.sock: connect: no such file or directory\

1949488-20230106124630183-1637157021.png

 解决方案 sudo apt install containerd 

如果还不行(来自网络,未测试):

rm -rf /var/lib/containerd
systemctl start containerd
systemctl start docker

② /proc/sys/net/bridge/bridge-nf-call- iptables does not exist 

1949488-20230106125924455-2073528145.png

sudo modprobe br_netfilter

③ container runtime is not running 

1949488-20230106142157877-210869386.png

 安装一下:

sudo apt install container

如果还不行(来自网络,未测试):

rm -rf /etc/containerd/config.toml
systemctl restart containerd

④忽略一些错误

例如 [ERROR SystemVerification]: failed to parse kernel config: unable to load kernel module: “configs“ ,一些教程建议忽略,那么你可以使用 --ignore-preflight-errors=SystemVerification 来忽略这个错误

⑤ [kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz’ failed 

1949488-20230106165603853-896821984.png

检查docker是否安装,服务是否启动。启动服务 sudo systemctl enable --now docker   sudo systemctl restart kubelet 

目前卡这里了

⑥ /etc/kubernetes/manifests/etcd.yaml already exists 

重启服务即可 sudo kubeadm reset 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK