kubernetes kubeadm 初始化
文档说明:自建K8S,只记录关键地方;
k8s 版本 > 1.19
CRI 使用 containerd
实验环境: linux debian 11
#!/bin/bash
set -eux
set -o pipefail
# enp0s3 是网卡名称
KUBE_VERSION=`kubelet --version | awk -F ' ' '{print $2}'`
ip=$(ip address show | grep enp0s3 | grep 'inet' | awk '{print $2}' | awk -F '/' '{print $1}')
ip=$(ip -4 address show | grep enp0s3 | grep 'inet' | awk '{print $2}' | awk -F '/' '{print $1}' | sed -n '1p')
kubeadm config images list --v=5 --kubernetes-version=$(kubelet --version | awk -F ' ' '{print $2}')
kubeadm config images pull --v=5 --kubernetes-version=$(kubelet --version | awk -F ' ' '{print $2}')
swapoff -a
# 看看有什么报错,就解决什么报错即可 --v=5 显示日志的级别
kubeadm init --dry-run --v=5 --kubernetes-version=$KUBE_VERSION
kubeadm config images list
kubeadm config images pull
# 开始初始化
ip=$(ip address show | grep enp0s3 | grep 'inet' | awk '{print $2}' | awk -F '/' '{print $1}')
kubeadm init \
--kubernetes-version=$(kubelet --version | awk -F ' ' '{print $2}') \
--pod-network-cidr=10.244.0.0/16,fd00:11::/64 \
--service-cidr=10.96.0.0/16,fd00:22::/112 \
--token-ttl 0 \
--v=5 \
--apiserver-advertise-address="${ip}"
mkdir -p $HOME/.kube
echo "y\n" | cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
## 初始化完毕
kubenetes 使用ipvs 替代 iptables
kubectl edit configmap kube-proxy -n kube-system
# change mode from "" to ipvs
mode: ipvs
确认cgroup是否使用systemd,如果不是就修改为systemd
kubectl edit cm kubelet-config -n kube-system
cgroupDriver: systemd
查看镜像(ctr和crictl 两个都可以用)
ctr --namespace k8s.io containers ls
ctr --namespace k8s.io images ls
vi /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
# debug: true
crictl ps -a | grep -v Running | awk '{print $1}'
crictl images
其他用法
kubeadm init --kubernetes-version=v1.25.2 --image-repository registry.aliyuncs.com/google_containers
参考文档
- containerd
- cgroups
- kubernetes ipvs
- crictl 与 ctr 区别
- create-cluster-kubeadm
- kubeadm-init
- 一文搞懂容器运行时 Containerd