翼度科技»论坛 云主机 LINUX 查看内容

光速上手k8s(2023)(containerd)(未完待续)

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
又过了好久没写了,主要是近来状况也无聊
一、了解概念(参考

概念

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 - 
没有梯子的,下载好之后
  1. sudo apt-key add ./apt-key.gpg
  2. sudo apt-get update
复制代码
添加源
  1. sudo nano /etc/apt/sources.list.d/kubernetes.list
复制代码
添加 deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main 
安装
  1. sudo apt-get update
  2. sudo apt install kubelet kubernetes-cni kubeadm docker.io
复制代码
验证k8s是否安装好即可,直接敲kubectl + 回车。
关闭swap


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

 设置HostName

修改主机名
  1. sudo hostnamectl set-hostname master-node
复制代码
 
 初始化

方法一(推荐):
  1. sudo kubeadm init --pod-network-cidr=10.244.0.0/16<br>
复制代码
 使用镜像:
  1. kubeadm init --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers" --pod-network-cidr=10.244.0.0/16
复制代码
忽略一些报错:
  1. 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文件,内容:
  1. images=(  # 下面的镜像应该去除"k8s.gcr.io/"的前缀,版本换成上面获取到的版本
  2.     #你刚刚获取的
  3. )
  4. for imageName in ${images[@]} ; do
  5.     docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
  6.     docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
  7.     docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
  8. done
复制代码
  1. images=(  # 下面的镜像应该去除"k8s.gcr.io/"的前缀,版本换成上面获取到的版本
  2.     kube-apiserver:v1.12.1
  3.     kube-controller-manager:v1.12.1
  4.     kube-scheduler:v1.12.1
  5.     kube-proxy:v1.12.1
  6.     pause:3.1
  7.     etcd:3.2.24
  8.     coredns:1.2.2
  9. )
  10. for imageName in ${images[@]} ; do
  11.     docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
  12.     docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
  13.     docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
  14. done
复制代码
例子
  1. 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 或更高版本
  1. wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-amd64.tar.gz
  2. tar xvf containerd-1.6.12-linux-amd64.tar.gz
  3. systemctl stop containerd
  4. cd bin
  5. cp * /usr/bin/
  6. 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\



 
 解决方案 sudo apt install containerd 
如果还不行(来自网络,未测试):
  1. rm -rf /var/lib/containerd
  2. systemctl start containerd
  3. systemctl start docker
复制代码
 

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

  1. sudo modprobe br_netfilter
复制代码
 
③ container runtime is not running 


 
 
 安装一下:
  1. sudo apt install container
复制代码
如果还不行(来自网络,未测试):
  1. rm -rf /etc/containerd/config.toml
  2. 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 


 
检查docker是否安装,服务是否启动。启动服务 sudo systemctl enable --now docker   sudo systemctl restart kubelet 
目前卡这里了
 
 
⑥ /etc/kubernetes/manifests/etcd.yaml already exists 
重启服务即可 sudo kubeadm reset 
 

来源:https://www.cnblogs.com/Ctrl-cCtrl-v/p/17030193.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具