本次在搭建k8s集群的过程中,遇到了很多问题,幸好最后终于成功。故将整个过程记录下来,希望对大家有所帮助。

环境说明

环境:4台ubuntu16.04 1个master 3个node

k8s版本:V1.13.2

搭建说明

本教程采用kubeadm的方式安装,主要针对的是国内用户,因为安装k8s会遇到墙的问题。所以本文安装前,先将k8s需要的组件以二进制的方式先下载下来。并且k8s需要的镜像,我们先从dockerhub上拉取相关镜像,然后再tag成k8s需要的镜像。

安装docker,针对所有节点

运行以下的脚本(假设名为a.sh)

#!/bin/bash
#SET UP THE REPOSITORY
apt-get remove docker docker-engine docker.io
apt-get update
apt-get install -y -q \
	apt-transport-https \
	ca-certificates \
	curl \
	software-properties-common
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | apt-key add -
add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
#install docker
apt-get update && apt-get install docker-ce=18.06.0~ce~3-0~ubuntu

然后执行 sudo chmod 700 a.sh 将a.sh变成可执行文件

然后执行 ./a.sh

安装kubernetes,在master节点执行

将下载的zip包解压:unzip k8s_ubuntu_deb.zip

(压缩包地址: https://github.com/zoux86/k8s/blob/master/k8s_ubuntu_deb.zip

然后在解压后的目录执行下面的脚本,安装Kubeadm,kubelet。

#!/bin/bash
apt-get install -y -q socat ebtables ethtool
dpkg -i kubernetes-cni_0.5.1-00_amd64.deb
dpkg -i kubelet_1.8.7-00_amd64.deb
dpkg -i kubectl_1.8.7-00_amd64.deb
dpkg -i kubeadm_1.8.7-00_amd64.deb
systemctl enable kubelet
systemctl start kubelet

提前拉取相关镜像,在master节点

#!/bin/bash
ufw disable
# 关闭swap,重启后会失效,可加入到启动脚本rc.local里
swapoff -a
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
# pull镜像重新标记tag
images=(kube-scheduler-amd64:v1.8.7 \
kube-apiserver-amd64:v1.8.7 \
kube-proxy-amd64:v1.8.7 \
kube-controller-manager-amd64:v1.8.7
etcd-amd64:3.0.17 \
pause-amd64:3.0 \
k8s-dns-sidecar-amd64:1.14.5 \
k8s-dns-kube-dns-amd64:1.14.5 \
k8s-dns-dnsmasq-nanny-amd64:1.14.5 \
kubernetes-dashboard-amd64:v1.8.1)
for imageName in ${images[@]} ; do
  docker pull andylo25/$imageName
  docker tag andylo25/$imageName gcr.io/google_containers/$imageName
  docker rmi andylo25/$imageName
done

启动集群,master节点

kubeadm init --kubernetes-version=v1.13.2 --pod-network-cidr 10.244.0.0/16

初始化正常后会在最后的地方x显示一个加入集群的提示命令,这个一定要注意,后面要用到。命令如下:

kubeadm join --token 34fb5a.87ec418b32857c65 192.168.129.133:6443 --discovery-token-ca-cert-hash sha256:da4765f5721db7ed2130c265a71e849005f0334aeb821cd05ec9c9020e036919

如果非root用户下想使用kubelet,进行下面的操作

切换到非root用户下,然后执行下面的命令:

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

安装网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml  

worker节点加入集群,在所有worker节点执行

解压前面下载的k8s二进制文件
unzip k8s_ubuntu_deb.zip
进入解压后的文件,然后执行下面脚本,安装k8s组件
#!/bin/bash
ufw disable

# 关闭swap,重启后会失效,可加入到启动脚本rc.local里

swapoff -a
cat >> /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
sysctl -p /etc/sysctl.d/k8s.conf

# 安装k8s相关软件

apt-get install -y -q socat ebtables ethtool
dpkg -i kubernetes-cni_0.5.1-00_amd64.deb
dpkg -i kubelet_1.8.7-00_amd64.deb
dpkg -i kubectl_1.8.7-00_amd64.deb
dpkg -i kubeadm_1.8.7-00_amd64.deb
systemctl enable kubelet
systemctl start kubelet

# pull镜像重新标记tag

images=(kube-proxy-amd64:v1.8.7 \
pause-amd64:3.0 \
kubernetes-dashboard-amd64:1.8.1)
for imageName in ${images[@]} ; do
  docker pull andylo25/$imageName
  docker tag andylo25/$imageName gcr.io/google_containers/$imageName
  docker rmi andylo25/$imageName
done

加入集群,在所有的worker上执行

kubeadm join --token 34fb5a.87ec418b32857c65 192.168.129.133:6443 --discovery-token-ca-cert-hash sha256:da4765f5721db7ed2130c265a71e849005f0334aeb821cd05ec9c9020e036919

ps:这是k8S安装时需要的镜像

gcr.io/google_containers/kubernetes-dashboard-amd64      
gcr.io/google_containers/kube-proxy-amd64                
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64     
gcr.io/google_containers/k8s-dns-kube-dns-amd64         
gcr.io/google_containers/k8s-dns-sidecar-amd64           
gcr.io/google_containers/pause-amd64                     
gcr.io/google_containers/etcd-amd64                      
gcr.io/google_containers/kube-scheduler-amd64           
gcr.io/google_containers/kube-controller-manager-amd64  
gcr.io/google_containers/kube-apiserver-amd64           
quay.io/coreos/flannel