kubernetes 1.8.7 国内安装(kubeadm)
kubernetes 简称k8s,简单来说就是一个容器编排部署集群工具,你只要做好一个应用镜像,剩下的什么部署、调度、扩容、缩容,就她来了。换句话说,就是你只要写好应用代码,其他运维的事你就别管了。
1. 国内安装的几个问题
一直没时间看看这个东西,最近越来越火,不得不抽点时间瞜一眼,毕竟容器云的天下,k8s也是占了好大一席。 折腾了几天,安装教程倒不少,只是要么比较老,要么得翻墙,下载速度慢得要命,想顺利的安装一个集群还真不那么简单。 不过也好,久病成良医,填的坑多了生的也变熟了。
国内因为Google相关的网站被墙,所以安装并没官网所说的那样一帆风顺。主要有这么几个问题:
- k8s的相关安装包,需要引用国内下载镜像,或者直接下载安装包进行手工安装。
- k8s的应用pod docker镜像,国内无法直接下载。需要通过dockerhub中转。
2. 安装前准备
为了解决上面几个问题,需要先做一些准备工作。
- 下载安装包:
Ubuntu安装包可以通过中科大的镜像进行下载,当然也可以直接到我的github下进行下载. - docker镜像准备:
dockerhub上支持通过Dockerfile进行自动构建,在github上建立对应的Dockerfile,通过dockerhub的创建镜像引用github目录,进行自动构建。可参考我的github,还有douckerhub镜像,dockerhub镜像可以直接使用,一会我们安装的时候就是用的这个镜像。
3. 开始安装
192.138.129.133 k8s-master
192.138.129.134 k8s-node01
1. 安装docker
master上执行:
#!/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 CE
apt-get install -y -q docker-ce
2. 安装kubernetes
将下载的zip包解压:
unzip k8s_ubuntu_deb.zip
执行安装脚本:
#!/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
3. 安装前准备
执行脚本:
#!/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 \
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
这里拉取镜像的时候可能会比较慢,可以用docker镜像加速。
4. 启动集群
#!/bin/bash
kubeadm init --kubernetes-version=v1.8.7 --pod-network-cidr 10.244.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 安装cni插件flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
初始化正常后会在最后的地方一个加入集群的提示命令:
如下:
kubeadm join --token 34fb5a.87ec418b32857c65 192.168.129.133:6443 --discovery-token-ca-cert-hash sha256:da4765f5721db7ed2130c265a71e849005f0334aeb821cd05ec9c9020e036919
5. 加入集群
在新的节点执行安装docker命令,启动docker,将之前下载的安装包上传到该节点:
将下载的zip包解压:
unzip k8s_ubuntu_deb.zip
然后执行如下脚本:
#!/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
# 执行加入集群命令
kubeadm join --token 34fb5a.87ec418b32857c65 192.168.129.133:6443 --discovery-token-ca-cert-hash sha256:da4765f5721db7ed2130c265a71e849005f0334aeb821cd05ec9c9020e036919
等待一段时间,在master上执行:
kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 8d v1.8.7
k8s-node01 Ready <none> 7d v1.8.7
如果状态一直NotReady,可以重启一下主机,有可能是网络插件安装的时候初始化失败,重启后会自动重新初始化。
6. 安装kubernetes-dashboard
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
kubectl create -f kubernetes-dashboard.yaml
# 启动代理
kubectl proxy
通过代理访问dashboard,只能在master上访问:
curl 127.0.0.1:8001/ui
好了,可以通过kubectl执行相关命令来体验k8s的强大了,比如部署应用,自动扩容,灰度发布等等。。。