本文记录在 Ubuntu 18.04 Server 中安装 Kubernetes 的的过程。
调整 Ubuntu 的设置
网络 - 内核开启ip4转发
编辑 /etc/sysctl.conf,开启ipv4转发
1 | sudo vim /etc/sysctl.conf |
开启: net.ipv4.ip_forward = 1
保存文件后执行
1 | sudo sysctl -p |
禁用 Swap 分区
执行以下命令,禁用所有 Swap 分区
1 | sudo swapoff -a |
然后修改/etc/fstab文件,注释掉 SWAP 的自动挂载,防止机子重启后swap启用。
更新Ubuntu
1 | sudo apt-get update |
安装 Docker
Docker - 设置docker不操作iptables
编辑docker daemon默认配置文件 /etc/docker/daemon.json。加入:
1 | "iptables": false |
安装 Kubernetes
1 | sudo apt-get install -y apt-transport-https curl |
设置使用国内(阿里)镜像源进行安装:
1 | sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - |
1 | sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF' |
1 | sudo apt-get update |
安装最新版本的 kubelet kubeadm 和 kubectl
1 | sudo apt-get install -y kubelet kubeadm kubectl |
将 kubelet 设置为开启启动
1 | sudo systemctl enable kubelet && sudo systemctl start kubelet |
获取镜像文件
查看需要的镜像
1 | kubeadm config images list |
系统输出:
1 | k8s.gcr.io/kube-apiserver:v1.15.3 |
编辑一个文件, 命名为: install_k8s_images.sh
1 |
|
将文件设置为可运行:
1 | chmod a+x install_k8s_images.sh |
运行 install_k8s_images.sh 安装所需要的镜像
1 | ./install_k8s_images.sh |
更新:以上需要的镜像我已经打包成一个文件,可以直接加载到 docker 中,参考 从本地上传安装 kubernetes 所需要的镜像
注意:以上步骤需要在Master和Node机器完成
配置Master节点
修改主节点的 hostname 为: master-node
1 | sudo hostnamectl set-hostname master-node |
初始化 Kubernetes:
1 | sudo kubeadm init --pod-network-cidr=10.244.0.0/16 |
系统显示:
1 | W0907 16:17:44.359105 1998 version.go:98] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get https://dl.k8s.io/release/stable-1.txt: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) |
为当前用户保存 kubernetes 配置信息
1 | mkdir -p $HOME/.kube |
1 | sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config |
1 | sudo chown $(id -u):$(id -g) $HOME/.kube/config |
现在,你可以使用以下命令,加入新的节点(node):
1 | kubeadm join 192.168.43.10:6443 --token mg39mb.hmfz2bao1t90fcdc \ |
现在,我们可以通过 kubetl 命令查看状态
1 | kubectl get nodes |
得到如下结果:
1 | NAME STATUS ROLES AGE VERSION |
可以看到,当前只有一个节点,并且状态是:”NotReady”, 因为现在还没有配置任何Pod网络。
在Master上部署一个Pod网络
在本教程中,我们部署一个 Flannel pod network。在Master节点机器上执行以下命令:
1 | sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
系统显示:
1 | podsecuritypolicy.policy/psp.flannel.unprivileged created |
执行后,查看pod网络的状态:
1 | kubectl get pods --all-namespaces |
系统显示:
1 | NAMESPACE NAME READY STATUS RESTARTS AGE |
整个过程需要花费一定的时间,知道所有服务都已经启动:
1 | NAMESPACE NAME READY STATUS RESTARTS AGE |
这时,再查看节点状态:
1 | kubectl get nodes |
1 | NAME STATUS ROLES AGE VERSION |
可以看到, master节点已经准备就绪。
准备工作节点
修改主机名
修改主节点的 hostname 为: worker-node01
1 | sudo hostnamectl set-hostname worker-node01 |
设置admin配置文件
将主节点中的 /etc/kubernetes/admin.conf 文件拷贝到从节点相同目录下。
拷贝以后,在从节点执行:
1 | echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile |
- 执行
1 | source ~/.bash_profile |
是改动立即生效
将节点加入Pod网络
现在,你可以使用以下命令,加入新的节点(node):
1 | sudo kubeadm join 192.168.43.10:6443 --token mg39mb.hmfz2bao1t90fcdc --discovery-token-ca-cert-hash sha256:4343f8637818221cc153a4c556a6a29606f5a14ea040b3e9ee1e5e29af6e7381 |
系统显示:
1 | [preflight] Running pre-flight checks |
再运行 get nodes 查看:
1 | kubectl get nodes |
系统显示:
1 | NAME STATUS ROLES AGE VERSION |
标明已经安装成功过。