(安装过程在 ubuntu 安装 k8s 的基础上做了精简。)
有两台 ubuntu16.04 的机器,已安装了docker,希望安装 K8S 组成集群。
在两台机器上,
1、关闭交换分区。
swapoff -a
2、修改 docker 的进程隔离策略。
vi /etc/docker/daemon.json
# 在{}内的最后增加一行 "exec-opts": ["native.cgroupdriver=systemd"],上一行加个','。
{
# 其他语句
"exec-opts": ["native.cgroupdriver=systemd"]
}
# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
3、安装 kubeadm、kubectl、kubelet。
# 使得 apt 支持 ssl 传输
apt-get update && apt-get install -y apt-transport-https
# 下载 gpg 密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# 添加 k8s 镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 更新源列表
apt-get update
# 下载 kubectl,kubeadm以及 kubelet
apt-get install -y kubelet kubeadm kubectl
把其中一台 (172.16.1.1)作为 master,
4、初始化 master。
kubeadm init \
--apiserver-advertise-address=172.16.1.1 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16
# 如果出现 kubelet 起不来的错误,用 “journalctl -xeu kubelet” 查看细节。
# 我出现了 "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\"" 的错误,做了步骤2就好了。
5、执行 kubectl get nodes,出错参考 报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
6、安装 flannel,出错参考 Connecting to raw.githubusercontent.com failed: Connection refused. 解决办法
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 如果解析不了 raw.githubusercontent.com,在 /etc/hosts 中增加 199.232.28.133 raw.githubusercontent.com
把另一台(172.16.1.2)作为 slave,
4、加入集群。
# 在 master 上执行,获取加入集群的完整命令。
kubeadm token create --print-join-command
# 返回结果如下, 在 slave 上执行它。
kubeadm join 172.16.1.1:6443 --token h6tzjw.ctjuhvjrvntbz289 --discovery-token-ca-cert-hash sha256:c26e7d178ff0ac1395267886d87093ec05e563e1e4edc2f4dc3b3ce3b83e3568
基本好了。
在 master 上用 kubectl get nodes 会看到两台机器了,
在 slave 上用 kubectl get nodes 会出错 ,“The connection to the server localhost:8080 was refused - did you specify the right host or port?”,把 master上的admin.conf 远程复制到 slave 上即可。
# 在 master 上执行。
scp /etc/kubernetes/admin.conf root@172.16.1.2:/root/.kube/config