Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。
准备
节点 | 主机名 | IP | 系统&内核 | 配置 |
master01 | k8s01 | 10.70.5.190 | Centos7.9,Kernel 5.4.259-1.el7.elrepo.x86_64 | 8c16g100g |
node01 | k8s02 | 10.70.5.191 | Centos7.9,Kernel 5.4.259-1.el7.elrepo.x86_64 | 8c16g100g |
node02 | k8s03 | 10.70.5.192 | Centos7.9,Kernel 5.4.259-1.el7.elrepo.x86_64 | 8c16g100g |
- 机器配置
# 关闭 firewalld 防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld
$ setenforce 0
$ sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 永久关闭 SELinux
# 临时禁用 swap
$ swapoff -a
$ sed -i '/.*swap.*/d' /etc/fstab # 永久禁用 swap
# 配置 /etc/hosts
$ cat > /etc/hosts << EOF
10.70.5.190 k8s01
10.70.5.191 k8s02
10.70.5.192 k8s03
EOF
# 配置内核转发 & 网桥过滤
$ 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
# 加载br_netfilter模块
$ modprobe br_netfilter
$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# 安装ipset及ipvsadm
$ yum -y install ipset ipvsadm
$ cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
$ chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack # 授权、运行、检查是否加载
# 配置时间同步
$ yum install -y chrony
$ systemctl enable --now chronyd
- 安装 & 启动 containerd
$ yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
$ yum install -y yum-utils
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:24.0.0-1.el8 docker-ce-stable
docker-ce.x86_64 3:23.0.6-1.el8 docker-ce-stable
<...>
$ yum install -y containerd.io
$ systemctl enable --now containerd
$ containerd config default > /etc/containerd/config.toml # 生成默认配置
$ vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9" # 修改为阿里镜像地址
SystemdCgroup = true # 使用 Cgroup
$ systemctl restart containerd
- 安装 crictl & 设置 crictl 连接 containerd
$ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.27.1/crictl-v1.27.1-linux-amd64.tar.gz
$ tar -zxvf crictl-v1.27.0-linux-amd64.tar.gz -C /usr/bin/
$ crictl config --set runtime-endpoint=unix:///run/containerd/containerd.sock
- 配置 K8S 仓库
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
- 安装 kubeadm 和 kubelet
$ yum install -y kubelet-1.27.6 kubeadm-1.27.6 kubectl-1.27.6
- 为了实现 docker 使用的 cgroupdriver 与 kubelet 使用的 cgroup 的一致性,建议修改如下文件内容。
cat <<EOF > /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
- 启动 kubelet
$ systemctl enable --now kubelet
初始化集群(Master节点操作)
$ kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=10.70.5.190 \
--kubernetes-version=v1.27.6 \
--service-cidr=110.10.0.0/16 \
--pod-network-cidr=110.110.0.0/16
$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ chown $(id -u):$(id -g) $HOME/.kube/config
# 查看集群状态
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s01 NotReady control-plane 4m18s v1.27.6
安装网络插件-Calico(Master节点操作)
集群初始化完成后节点都处于 NotReady 状态,需要安装网络插件,常见网络插件有 Flannel、Calico、Weave等,在此选用 Calico。【扩展学习-K8S网络插件:https://developer.aliyun.com/article/1245323】
$ curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/tigera-operator.yaml
$ kubectl create -f tigera-operator.yaml
$ curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/custom-resources.yaml
$ vim custom-resources.yaml
spec:
calicoNetwork:
ipPools:
- blockSize: 26
cidr: 110.110.0.0/16 # 此处和 --pod-network-cidr=110.110.0.0/16 保持一致
$ kubectl create -f custom-resources.yaml
$ watch kubectl get pods -n calico-system
此处常见错误 cni plugin not initialized
:
kubelet "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized"
百思不得解,重启服务器解决!参考下面文档:
- https://discuss.kubernetes.io/t/k8s-cni-plugin-issue-cni-plugin-not-initialized-while-kube-flannel-is-running/24136/2
- https://blog.51cto.com/u_16175451/6599028
结论:"Container runtime network not ready" 错误通常是由于网络配置不正确或网络插件未正确安装等原因引起的,重启节点可能会清理可能导致网络问题的缓存或配置!
添加 node 节点(node节点操作)
$ kubeadm join 10.70.5.190:6443 --token 95fk2q.xixv9p6umea8oa1n \
--discovery-token-ca-cert-hash sha256:f23cfa147d262484f5060eacd24187849ac648a640709c00349f3437865ef96d
# 以上 token 有过期时间,过期后可使用下面命令重新获取
$ kubeadm token create --print-join-command
# 在node节点执行完上面命令后查看集群状态(在 master 节点操作)
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s01 Ready control-plane 6h18m v1.27.6
k8s02 Ready <none> 6h14m v1.27.6
k8s03 Ready <none> 6h14m v1.27.6
部署成功!
配置命令自动补全功能
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ source ~/.bashrc
安装 Dashboard
省略...
扩展:crictl 命令用法
- 镜像相关
功能 | Docker | Containerd |
显示本地镜像 | docker images | crictl images |
下载镜像 | docker pull | crictl pull |
上传镜像 | docker push | 无 |
删除本地镜像 | docker rmi | crictl rmi |
查看镜像详情 | docker inspect {image_id} | crictl inspecti {image_id} |
- 容器相关
功能 | Docker | Containerd |
显示容器列表 | docker ps [-a] | crictl ps |
创建容器 | docker create | crictl create |
启/停容器 | docker start/stop | crictl start/stop |
删除容器 | docker rm [-f] | crictl rm |
查看容器详情 | docker inspect | crictl inspect |
附加容器 | docker attach | crictl attach |
执行命令 | docker exec | crictl exec |
查看日志 | docker logs | crictl logs |
查看容器资源 | docker stats | crictl stats |
- pod 相关
功能 | Docker | Containerd |
显示 pod 列表 | 无 | crictl pods |
查看 pod 详情 | 无 | crictl inspectp |
运行 pod | 无 | crictl runp |
停止 pod | 无 | crictl stopp |
本节完!
标签:--,containerd,etc,集群,crictl,v1.27,yum,docker,K8S From: https://blog.51cto.com/u_64214/8298828