1.环境要求
机器名 |
ip地址 |
cpu和内存要求 |
k8s-master |
10.0.0.20 |
2c4g(关闭swap) |
k8s-node01 |
10.0.0.21 |
2c4g(关闭swap) |
k8s-node02 |
10.0.0.22 |
2c4g(关闭swap) |
1.1. 配置hosts解析
cat >> /etc/hosts << EOF
k8s-master 10.0.0.20
k8s-node01 10.0.0.21
k8s-node02 10.0.0.22
EOF
2.关闭防火墙、selinux 、swap
2.1 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
2.2 关闭selinux
setenforce 0 #临时关闭
getenforce #查看状态
sed -i 's/enforcing/disabled/' /etc/selinux/config
3.3 关闭swap
# 临时
swapoff -a
# 永久
sed -ri 's/.*swap.*/#&/' /etc/fstab
3.3.1 执行完上面操作swap已经关闭,有必要情况下还需下面操作
echo 0 > /proc/sys/vm/swappiness # 临时生效
vim /etc/sysctl.conf # 永久生效
#修改 vm.swappiness 的修改为 0
vm.swappiness=0
sysctl -p # 使配置生效
3.开始安装
3.1安装docker
# 下载docker源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#列出docker所有版本
yum list docker-ce --showduplicates
# 安装指定docker版本
yum install docker-ce-20.10.24 docker-ce-cli-20.10.24 -y
# 启动docker并设置开机启动
systemctl enable docker && systemctl start docker
# 优化下载源
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://mw86j9k8.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
docker info
3.2.安装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
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
systemctl enable kubelet
3.3.使用kubeadm初始化k8s集群
所有节点
1.将内核参数改为1
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效
2.控制节点上运行,注意最后的输出
kubeadm init \
--apiserver-advertise-address=10.0.0.20 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
--apiserver-advertise-address 集群通告地址,这里表示为master地址
--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version K8s版本,需要与刚才安装的保持一致
--service-cidr k8s中service的地址范围
--pod-network-cidr k8s中pod网络的地址范围,需要与部署的CNI网络插件yaml中的地址保持一致。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.给k8s集群加入node节点:
node节点上执行前面控制节点提示的加入命令
kubeadm join 10.0.0.20:6443 --token b07qm3.evix2mda09nbpqe6 \
--discovery-token-ca-cert-hash sha256:b4759fc642debb7e91844f0db84855bec2c4e4261f5c04bbda7a2ce349a066e4
4.在master上执行kubectl get nodes,已看到node加入了集群
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 2m48s v1.21.0
k8s-node01 NotReady <none> 43s v1.21.0
k8s-node02 NotReady <none> 7s v1.21.0
如果要新加集群的话可以使用下面命令
kubeadm token create --print-join-command
如果初始化有问题,用以下命令回滚清除
kubeadm reset
5.为k8s集群配置网络插件
这里可能得需要科学上网进行下载
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
#再次查看已经Ready
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 11m v1.21.0
k8s-node01 Ready <none> 9m33s v1.21.0
k8s-node02 Ready <none> 8m57s v1.21.0
6.查看pod发现coredns未Running
[root@k8s-master ~]# kubectl get pod -A -owide |grep coredns
kube-system coredns-545d6fc579-9f6xk 0/1 ImagePullBackOff 0 54s 10.244.2.2 k8s-node02 <none> <none>
kube-system coredns-545d6fc579-b2pkm 0/1 ImagePullBackOff 0 54s 10.244.2.3 k8s-node02 <none> <none>
#在node02上执行以下解决
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.0
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
3.4 让k8s tab键补全
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
3.5 初始化完成后在node节点无法执行命令解决办法
kubectl get node
The connection to the server localhost:8080 was refused - did you specify the right host or port?
报以上问题,解决方法如下:
#1.在master节点上执行
scp -rp /etc/kubernetes/admin.conf root@10.0.0.21:/etc/kubernetes/
scp -rp /etc/kubernetes/admin.conf root@10.0.0.22:/etc/kubernetes/
#2.在node节点上执行
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
#3.然后就可以执行命令了
kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 23m v1.21.0
k8s-node01 Ready <none> 21m v1.21.0
k8s-node02 Ready <none> 21m v1.21.0
网友评论