本文环境是ubuntu22.04,需求是部署单master集群,容器要求使用containerd,此前咱们在centos上部署过,也在ubuntu18.04上使用docker部署过,相关的教程可以查看此前的笔记
centos7使用docker部署单master集群:https://sulao.cn/post/799
centos7使用containerd部署单master集群:https://sulao.cn/post/943
ubuntu18.04使用docker部署单master集群:https://sulao.cn/post/818
ubuntu22.04使用containerd部署单master集群具体操作如下,操作均切换root用户进行操作。
1.在线安装基础软件包
apt update -y
apt install -y gcc gcc+ make apt-transport-https ca-certificates curl gnupg-agent gnupg lsb-release make software-properties-common net-tools git curl ntpdate
2.修改主机名和绑定hosts
以下主机名和IP根据自己的实际情况进行修改
#修改主机名
hostnamectl set-hostname master
#修改hosts绑定内网IP和主机
cat >>/etc/hosts<<EOF
10.0.1.184 master
EOF
3.关闭swap和关闭防火墙
#关闭swap sudo swapoff -a vim /etc/fstab
注释掉/etc/fstab中swap相关配置 systemctl stop swap.target systemctl disable swap.target
systemctl stop ufw systemctl disable ufw
4.优化内核参数
cat >/etc/sysctl.d/k8s.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
#使上述配置生效
sysctl --system
5.开启内核转发
echo "1" > /proc/sys/net/ipv4/ip_forward
6.加载内核模块
modprobe br_netfilter
lsmod | grep br_netfilter
查看内核是否加载了br_netfilter过滤模块
7.修改时区同步时间
sudo timedatectl set-timezone Asia/Shanghai
ntpdate time.windows.com
8.部署containerd容器
wget https://github.com/containerd/containerd/releases/download/v1.7.27/cri-containerd-1.7.27-linux-amd64.tar.gz
tar -zxvf cri-containerd-1.7.27-linux-amd64.tar.gz -C /
mkdir -p /etc/containerd
containerd config default >/etc/containerd/config.toml
修改containerd配置的config.toml文件
vim /etc/containerd/config.toml
root = "/data/containerd" #修改存储位置
SystemdCgroup = true #修改cgroup驱动
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8"
然后加载开机启动和启动containerd并查看状态
systemctl daemon-reload
systemctl enable --now containerd
systemctl status containerd
使用命令查看containerd的配置
containerd config dump
使用crictl管理镜像
cat >/etc/crictl.yaml<<EOF
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
EOF
9.部署k8s
9.1.添加安装源
添加安装源,如果需要修改为其他版本,可以直接修改下面安装源中的版本号即可。
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
9.2.安装kubelet/kubeadm/kubectl
然后用以下命令进行安装
apt update -y
apt install -y kubelet kubeadm kubectl
#设置开机启动
systemctl enable kubelet
9.3.禁止kubelet和kubectl更新
apt-mark hold kubelet kubectl
9.4.创建修改k8s初始化配置
创建k8s初始化配置文件
cd /etc/kubernetes
kubeadm config print init-defaults > default.yaml
修改初始化配置文件
sed -i "s/1.2.3.4/0.0.0.0/" /etc/kubernetes/default.yaml
sed -i "s#registry.k8s.io#registry.cn-hangzhou.aliyuncs.com/google_containers#" /etc/kubernetes/default.yaml
sed -i '/10.96.0.0\/12/a\ podSubnet: 10.244.0.0\/16' /etc/kubernetes/default.yaml
sed -i "s/name: node/name: $HOSTNAME/g" /etc/kubernetes/default.yaml
9.5.初始化k8s集群
kubeadm init --config=default.yaml
初始化完成以后会打印加入集群节点的join命令,我们记录下来,后面方便后续节点的加入。
9.6.创建k8s管理配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
10.安装cni网络组件
这里我们选择是的calico-3.26.0,此前3.25.0有bug,我们可以先下载下来两个yaml文件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml
我们需要对custom-resources.yaml文件进行修改,去掉- name这行。
- name: default-ipv4-ippool
上面是这样
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
calicoNetwork:
ipPools:
- blockSize: 26
cidr: 10.244.0.0/16
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()
接着我们就可以进行安装了。
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml
安装完成以后我们就可以查看k8s集群状态了,中间会拉取很多calico相关镜像,目前网络环境可能很多需要自己想办法去拉取这些进行导入到环境。
11.去掉master节点污点
因为我们是单master,所以master节点也是要参与调度的。
kubectl describe node master | grep -i taint Taints: node-role.kubernetes.io/control-plane:NoSchedule
#记录上述污点的key下面进行去除 kubectl taint node master node-role.kubernetes.io/control-plane:NoSchedule-
至此k8s集群就部署完成。
12.相关问题处理和相关工具安装
我部署以后出现了无法自动删除关联rs和pod的问题,可以查看笔记:https://sulao.cn/post/1099
其他相关配置可以查看
安装nvidia-container-runtime可以查看这个笔记:https://sulao.cn/post/1020
配置nvidia-container-runtime到containerd可以查看这个笔记:https://sulao.cn/post/944
使用nvidia-device-plugin上报GPU信息到k8s可以查看这个笔记:https://sulao.cn/post/975
kube-proxy从iptables切换到ipvs可以查看这个笔记:https://sulao.cn/post/1100
containerd带的ctr和crictl两个命令无法进行构建镜像,所以需要自己再下个nerdctl工具处理构建镜像的问题,具体可以查看这个笔记:https://sulao.cn/post/923,另外nerdctl命令基本和docker命令一致,也可以直接使用这个命令进行containerd的容器管理。
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/1101
相关推荐
- k8s集群部署prometheus/node-exporter/dcgm-exporter
- k8s中calico匹配多种网络接口名字的方法
- k8s集群kube-proxy从iptables模式切换到ipvs模式
- k8s级联删除(删除deployment却删除不了rs和pod)异常问题的处理办法
- k8s中修改containerd存储目录并将数据迁移到新磁盘目录
- k8s网络cni插件calico的安装和网络模式切换
- k8s中pod使用RDMA网卡的方法(待验证)
- ubuntu22.04部署openvpn和openvpn客户端配置
- linux云服务器内存缩水问题的解决方法
- ubuntu22.04编译安装postgresql17.5
评论列表