kubernetes 集群安装配置

2019-08-06

安装 Docker

在内网里面装 Docker ,连接国外就很慢,更不用说被墙掉的东西了,先按照清华大学的镜像站 https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/,把 Docker 在三台 ubuntu 16.04 机器上装好,再安装好 docker-compose https://docs.docker.com/compose/install/。

安装 k8s

安装 kubeadm kubelet kubectl

还是得用国内镜像源

1
2
3
4
sudo vi /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
sudo apt-get update
apt-get install kubelet kubeadm kubectl

这里有个坑,安装好这三个组件后,kubelet 可能会起不来,照理说应该是会作为 system services 自动启动的,多等一会,如果还是不能启动的话就手动 sudo kubelet 启动一下,然后杀掉,再等一会看会不会启动,完全看运气,查了很多的资料发现各种文档教程都没写明白,装 k8s 有好几个坑,没一个说明白的,全靠自己想办法和猜,总之 kubelet 要启动起来。

在宿主机上下载好 k8s 需要的 image 并打好 tag

根据当前系统的版本,或得 k8s 需要 image 的版本

1
kubeadm config images list

得到版本号后从阿里云下载 k8s 需要的 image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.1 k8s.gcr.io/kube-apiserver:v1.15.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.1 k8s.gcr.io/kube-controller-manager:v1.15.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.1 k8s.gcr.io/kube-scheduler:v1.15.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.1 k8s.gcr.io/kube-proxy:v1.15.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

在宿主机上启动 master 节点

1
sudo kubeadm init

不加任何参数,很多的文档教程都写了不通的网络组件用不通的参数,默认就应该用 CNI,不加任何参数,启动 master 节点完成后会显示 kubeadm join 的命令,基本算是完成了启动,但是还没法用,得编辑 CNI 网络组件的两个文件才行。

init 完成后会出现三条编辑配置的命令,顺序执行就好。

宿主机上编辑 CNI 网络组件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mkdir -p /etc/cni/net.d

sudo nano /etc/cni/net.d/10-mynet.conf

{
"cniVersion": "0.3.0",
"name": "mynet",
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/16",
"routes": [
{"dst": "0.0.0.0/0"}
]
}
}

sudo nano /etc/cni/net.d/99-loopback.conf

{
"cniVersion": "0.3.0",
"type": "loopback"
}

检查主节点是否 ready

1
sudo kubectl get nodes -o wide

检查主节点容器是否正常运行

1
sudo kubectl get pods -n kube-system

如果显示 Ready,并且容器也都是 running 状态,那就证明主节点正常运行了。

子节点安装 配置

子节点同样安装上面 kubectl kubeadm kubelet 三个组件,同样会遇到 kebelet 不启动的问题,碰运气解决,主节点需要的七个 image 子节点只需要两个,kube-proxy 和 pause,同样下载好打好 tag,然后就执行主节点初始化完成的 kubeadm join 命令,也需要编辑两个 CNI 配置,命令参照上面。

检查集群是否安装完成

在两个子节点都完成了操作后,回到主节点,执行 sudo kubectl get nodes -o wide 如果显示三个节点都是 Ready,就证明集群已经安装配置完成。

今天也遇到了其他的问题,这三个机器是虚拟机创建出来的,上面 CNI 网络组件需要一个虚拟网段,可能是公司的防火墙原因,我在 k8s 上部署了 nginx 后发现不能访问,直接进入了防火墙的报错页面,这个问题还得研究研究,或者就不要再自己部署了,直接用云服务,只需要学习如何写配置就行了。