环境
虚拟机:hyper-v
系统:ubuntu-18.04.6-server
基础环境搭建
修改apt源
1 2 3 cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
关闭防火墙
整明白了之后再只开放具体的端口。
1 2 systemctl stop ufw systemctl disable ufw
关闭swap
1 2 3 4 swapoff -a vim /etc/fstab
配置hosts
1 2 3 4 vim /etc/hosts 192.168.137.100 k8s1 192.168.137.101 k8s2 192.168.137.102 k8s3
等基础环境搭建完成,每个节点分别设置自己的hostname
例如:
1 hostnamectl set-hostname k8s1
配置kubernetes apt源
1 2 3 4 5 6 echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list apt update gpg --keyserver keyserver.ubuntu.com --recv-keys 307EA071 gpg --export --armor 307EA071 | sudo apt-key add - apt update
安装kubelet kubeadm kubectl
1 2 3 apt install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl systemctl enable kubelet
安装docker
1 apt install -y docker-ce
安装所需镜像
1 2 3 4 5 6 7 8 9 kubeadm config images list
由于上述命令执行所列出的镜像地址国内可能拉取不到,所以将地址更换为国内可访问的。
1 2 3 4 5 6 7 8 docker pull k8simage/kube-apiserver:v1.23.1 docker pull k8simage/kube-controller-manager:v1.23.1 docker pull k8simage/kube-scheduler:v1.23.1 docker pull k8simage/kube-proxy:v1.23.1 docker pull k8simage/pause:3.6 docker pull k8simage/etcd:3.5.1-0 docker pull xyz349925756/coredns:v1.8.6
1 2 3 4 5 6 7 8 docker tag k8simage/kube-apiserver:v1.23.1 k8s.gcr.io/kube-apiserver:v1.23.1 docker tag k8simage/kube-controller-manager:v1.23.1 k8s.gcr.io/kube-controller-manager:v1.23.1 docker tag k8simage/kube-scheduler:v1.23.1 k8s.gcr.io/kube-scheduler:v1.23.1 docker tag k8simage/kube-proxy:v1.23.1 k8s.gcr.io/kube-proxy:v1.23.1 docker tag k8simage/pause:3.6 k8s.gcr.io/pause:3.6 docker tag k8simage/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0 docker tag xyz349925756/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
1 2 3 4 5 6 7 8 docker rmi k8simage/kube-apiserver:v1.23.1 docker rmi k8simage/kube-controller-manager:v1.23.1 docker rmi k8simage/kube-scheduler:v1.23.1 docker rmi k8simage/kube-proxy:v1.23.1 docker rmi k8simage/pause:3.6 docker rmi k8simage/etcd:3.5.1-0 docker rmi xyz349925756/coredns:v1.8.6
master配置
上来先配置hosts 。
初始化
1 kubeadm init --apiserver-advertise-address=192.168.137.100 --kubernetes-version v1.23.1 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
--apiserver-advertise-address
值为master的ip地址。
若卡在kubelet
的启动,则按下面步骤进行操作
1 2 3 4 5 6 7 8 docker info | grep -i cgroupcat /var/lib/kubelet/config.yaml vim /var/lib/kubelet/config.yaml systemctl restart kubelet
初始化成功后会提示 :
1 2 kubeadm join 192.168.137.100:6443 --token 1094in.pjnnp76v94a1bef1 --discovery-token-ca-cert-hash sha256:82a29989a1425df58746d36286b58e0bd99898de40e055797c97134b35b9aad8
创建.kube目录
1 2 3 mkdir -p $HOME /.kube sudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config sudo chown $(id -u):$(id -g) $HOME /.kube/config
安装 Pod 网络附加组件
未安装时,执行命令kubectl get pod -n kube-system
会有部分状态为pending
(阻塞)。
组件有好多,也不知道装哪个,先装了顺眼的flannel
吧。
1 kubectl apply -f https://fastly.jsdelivr.net/gh/flannel-io/flannel@master/Documentation/kube-flannel.yml
过一段时间再执行kubectl get pod -n kube-system
,可以发现所有状态都为running
了。
将master设为工作节点
1 kubectl taint nodes --all node-role.kubernetes.io/master-
会输出node/k8s1 untainted
查看集群节点状态
当前只有一个节点且状态为ready。
node配置
上来先配置hosts 。
加入集群
复制master初始化成功后提示的命令 ,执行。
再次执行kubectl get nodes
查看节点,发现多了对应的节点。
再稍等片刻,所有的节点状态都为ready了。
至此集群搭建完成 :)
参考资料