kubernetes 安装kubeadm - alx696/share GitHub Wiki

参考官方文档,在Ubuntu 18.04 Server中安装kubeadm。

注意

文件系统限制

测试发现Btrfs文件系统不被支持。

安装Docker

$ wget https://get.docker.com -O get-docker.sh && \
  sudo sh get-docker.sh --mirror Aliyun && \
  sudo usermod -aG docker $USER && \
  sudo nano /etc/docker/daemon.json

添加如下内容:

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "registry-mirrors": ["https://dockerhub.mirrors.nwafu.edu.cn/"]
}

重启,$ docker -v验证是否安装成功,输出字样:Docker version ...说明成功。

参考官方文档,参考安装配置Docker文档

注意官方文档中的/etc/docker/daemon.json配置!

安装kubeadm、kubelet、kubectl

修改源文件:

$ sudo nano /etc/apt/sources.list

添加:

deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main

保存后执行:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A030B21BA07F4FB && \
  sudo apt update && \
  sudo apt install -y kubelet kubeadm kubectl && \
  sudo apt-mark hold kubelet kubeadm kubectl

执行$ kubeadm version验证安装是否成功,如果成功输出字样为:kubeadm version: &version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3" ...

关闭虚拟内存

$ sudo swapoff -a
$ sudo nano /etc/fstab

/swap.img ...行前面添加#,将行注释掉!重启!

$ sudo reboot

设置主机名称

修改主节点名称:

$ sudo hostnamectl set-hostname nm

nm就是名称,从节点可以设为n1,n2这种,记得分别修改。

拉取初始镜像

这些镜像时组件集群必须的,因为万恶的防火墙,无法从k8s.gcr.io下载!暂时只能通过好心网友的镜像替代,具体为先下载替代镜像然后修改tag:

docker pull aiotceo/kube-apiserver:v1.17.9 && \
docker pull aiotceo/kube-controller-manager:v1.17.9 && \
docker pull aiotceo/kube-scheduler:v1.17.9 && \
docker pull aiotceo/kube-proxy:v1.17.9 && \
docker pull aiotceo/pause:3.1 && \
docker pull aiotceo/etcd:3.4.3-0 && \
docker pull aiotceo/coredns:1.6.5 && \
docker tag aiotceo/kube-apiserver:v1.17.9 k8s.gcr.io/kube-apiserver:v1.17.9 && \
docker tag aiotceo/kube-controller-manager:v1.17.9 k8s.gcr.io/kube-controller-manager:v1.17.9 && \
docker tag aiotceo/kube-scheduler:v1.17.9 k8s.gcr.io/kube-scheduler:v1.17.9 && \
docker tag aiotceo/kube-proxy:v1.17.9 k8s.gcr.io/kube-proxy:v1.17.9 && \
docker tag aiotceo/pause:3.1 k8s.gcr.io/pause:3.1 && \
docker tag aiotceo/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0 && \
docker tag aiotceo/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5 && \
docker save -o k8s.tar k8s.gcr.io/kube-apiserver:v1.17.9 k8s.gcr.io/kube-controller-manager:v1.17.9 k8s.gcr.io/kube-scheduler:v1.17.9 k8s.gcr.io/kube-proxy:v1.17.9 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.5

上门拉取和打包镜像只需在主节点进行,其它节点直接导入镜像包可以节省时间。

注意:需要确保每行代码成功执行!每个节点使用前都需要镜像包k8s.tar中的镜像!

初始化主节点

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16

如果没有问题等待一会输出如下字样: kubeadm join 192.168.1.2:6443 --token ...,说明初始化完成。

注意:妥善保存kubeadm join...内容,后面加入节点到集群中时需要!

启动集群

$ mkdir -p $HOME/.kube && \
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && \
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

部署网络组件

$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

执行$ kubectl get pods --all-namespaces查看状态,直到全部Running。例如:

u@nm:~$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-77d6cbc65f-5hf6d   1/1     Running   0          2m5s
kube-system   calico-node-7n8sm                          1/1     Running   0          2m5s
kube-system   coredns-6955765f44-c576q                   1/1     Running   0          18m
kube-system   coredns-6955765f44-tj92c                   1/1     Running   0          18m
kube-system   etcd-nm                                    1/1     Running   0          18m
kube-system   kube-apiserver-nm                          1/1     Running   0          18m
kube-system   kube-controller-manager-nm                 1/1     Running   0          18m
kube-system   kube-proxy-zhgbx                           1/1     Running   0          18m
kube-system   kube-scheduler-nm                          1/1     Running   0          18m

查看集群节点

u@nm:~$ kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
nm     Ready    master   21m   v1.17.3

添加节点到集群

在从节点上进行拉取初始镜像以上步骤安装kubeadm,然后执行下面命令加入集群:

$ sudo kubeadm join 192.168.1.2:6443 --token 2zmgla.fk3p79a4ksg70i0s \
    --discovery-token-ca-cert-hash sha256:802d48dfc53cef762829b2e3aa8f9fc7c8b13b135e9d26d471006f5433424831

输出字样Run 'kubectl get nodes' on the control-plane to see this node join the cluster.说明加入成功,在主节点中执行命令可以验证:

u@nm:~$ kubectl get nodes
NAME   STATUS   ROLES    AGE     VERSION
n1     Ready    <none>   4m23s   v1.17.3
nm     Ready    master   34m     v1.17.3

在nm节点上面执行的结果。

⚠️ **GitHub.com Fallback** ⚠️