ubuntu搭建k8s机器
本次在搭建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