01- 集群系统初始化

关闭防火墙

# systemctl disable --now firewalld

禁用selinux

# sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 
# grep ^SELINUX= /etc/selinux/config

配置hosts解析

# cat >> /etc/hosts <<'EOF'
10.0.0.201        master
10.0.0.204        node01
10.0.0.205        node02
10.0.0.206        node03
EOF

禁用swap

# swapoff -a && sysctl -w vm.swappiness=0
# sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

允许iptable检查桥接流量

# cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# modprobe br_netfilter
# 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 -p /etc/sysctl.d/k8s.conf

安装IPVS

# yum install -y 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_ipv4
EOF

# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

配置集群时间同步

# yum install chrony -y
# systemctl enable chronyd --now
# chronyc sources

02- 所有节点部署docker

配置docker源

# curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
或
# yum install -y yum-utils
# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

卸载旧版本docker

# yum remove docker* 

安装指定的docker版本

# yum -y install docker-ce-20.10.24 docker-ce-cli-20.10.24

安装docker命令拓展

# yum -y install bash-completion
# source /usr/share/bash-completion/bash_completion

配置docker优化

# mkdir -p /etc/docker && tee /etc/docker/daemon.json <<EOF
{
	"registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn",
        "https://hub-mirror.c.163.com",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn/"
     ],
	"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

启动docker

# systemctl daemon-reload && systemctl enable docker --now

03- 所有节点安装kubeadm,kubelet,kubectl

配置软件源

# 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=0
repo_gpgcheck=0
EOF

查看kubeadm的版本

# yum -y list kubeadm --showduplicates | sort -r

安装kubeadm,kubelet,kubectl软件包

# yum -y install kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0

启动kubelet服务

# systemctl enable --now kubelet && systemctl status kubelet

添加kubectl的自动补全功能

# echo "source <(kubectl completion bash)" >> ~/.bashrc && source ~/.bashrc

04- 初始化control plan节点

查看指定版本的k8s需要哪些镜像

# kubeadm config images list --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.17

手动拉取镜像

# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.17

使用kubeadm初始化master节点

# kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=192.168.0.0/16 --service-cidr=10.96.0.0/16  --service-dns-domain=123.com

拷贝授权文件,用于管理K8S集群

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config	
# export KUBECONFIG=/etc/kubernetes/admin.conf

查看集群节点

# kubectl get componentstatuses
# kubectl get cs

参数详解

--kubernetes-version

指定K8S master组件的版本号。

--image-repository

指定下载k8s master组件的镜像仓库地址。

--pod-network-cidr

指定Pod的网段地址。

--service-cidr

指定SVC的网段

--service-dns-domain

指定service的域名。若不指定,默认为"cluster.local"。

05- 配置所有worker节点加入k8s集群

所有节点加入K8S集群

# kubeadm join 10.0.0.201:6443 --token dgpfut.jd1iwnpnwml9h0jz \
	--discovery-token-ca-cert-hash sha256:8d67b9fca698d95b5a422f216af17a91bdb65c412bbe13a89c372904cf4b27ee

查看现有的节点

# kubectl get nodes

06- 安装网络插件并验证连通性

下载flannel的资源清单 记得改网段再应用

# kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
# sed -i.bak 's#10.244.0.0/16#192.168.0.0/16#g' kube-flannel.yml

如果忘记改网段了就删除该配置

# kubectl delete -f kube-flannel.yml 

应用flanne

# kubectl apply -f kube-flannel.yml 

检查flannel组件是否正常,均处于"Running"状态!

# kubectl get pods -A -o wide| grep kube-flannel