Ubuntu18.04 安装k8s
一、前期准备
准备两台 Ubuntu18.04 至少双核双线程
主机名 | IP | 说明 |
---|---|---|
master | 192.168.20.5 | k8s管理节点 |
node | 192.168.20.6 | k8s工作节点 |
二、修改主机名、更新host
编辑 /etc/hostname
修改主机名。
将 /etc/cloud/cloud.cfg
中的 preserve_hostname: false
改为 preserve_hostname: true
,否则重启后主机名仍会恢复。
在 master 的 /etc/hosts
中进行如下修改:
127.0.1.1 master
192.168.20.5 master
192.168.20.6 node
在 node 的
/etc/hosts
中进行如下修改:
127.0.1.1 node
192.168.20.5 master
192.168.20.6 node
安装 docker
参考:https://blog.csdn.net/k_young1997/article/details/104325159
修改 docker 驱动
在
/etc/docker/daemon.json
中添加:
'exec-opts': ['native.cgroupdriver=systemd']
重启 docker:
systemctl restart docker
查看 docker 驱动:
root@master:/# docker info | grep 'Cgroup Driver'
Cgroup Driver: systemd
kubernetes 官方建议 docker 驱动采用 systemd,当然可以不修改,只是kubeadm init时会有
warning([WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/)
可以忽略,生产环境建议修改,因为更稳定。
备注:
以上操作需在两台主机上执行
三、关闭防火墙、swap
1.防火墙
sudo ufw disable
2.关闭 swap
Kubernetes 1.8开始要求必须禁用Swap,如果不关闭,默认配置下kubelet将无法启动。
将
/etc/fstab
中的这一行注释掉
/swap.img none swap sw 0 0
执行
sudo swapoff -a
备注:
以上两个步骤需要在两台主机执行
四、安装 kubelet、kubeadm、kubectl
1.添加阿里源
由于国外网站访问较慢容易卡死,所以需要添加源。
在
/etc/apt/sources.list
中添加:
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
添加源的 key :
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
更新源:
sudo apt-get update
备注:
1.以上操作需在两台主机上执行
2.若不添加源的 key ,在更新源时会有如下报错:
Err:3 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease
The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 6A030B21BA07F4FB
2.开始安装
在 两台 服务器安装 kubelet、kubeadm、kubectl
sudo apt-get install -y kubelet kubeadm kubectl
查看版本号:
root@master:/# kubelet --version
Kubernetes v1.19.3
启动
kubelet
:
systemctl start kubelet
五、部署主(管理)节点
以下操作仅在 master 主机上执行
1.查看 kubernetes 所需镜像列表
获取最新版所需镜像列表
kubeadm config images list
结果:
随着不断更新,获取到的版本信息会有不同
k8s.gcr.io/kube-apiserver:v1.19.3
k8s.gcr.io/kube-controller-manager:v1.19.3
k8s.gcr.io/kube-scheduler:v1.19.3
k8s.gcr.io/kube-proxy:v1.19.3
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
2.执行 init
kubeadm init --kubernetes-version=v1.19.3 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
当出现如下内容时**(要保存下来,后边有用)**,执行成功:
kubeadm join 192.168.20.5:6443 --token gmhz6l.q4zvle4gqceoy4tp --discovery-token-ca-cert-hash sha256:bad772999ca7a8de85eb64a0fe570ae3cef92781e2e2bf9f9f6cbc793f1087f1
备注:
kubeadm init 命令默认会去 k8s.gcr.io 仓库拉取镜像,由于是国外网站基本不能拉下镜像。可以通过 --image-repository 参数指定为阿里镜像即可。
3.失败重试
若执行失败,可执行如下命令,清除执行
init
产生的垃圾
kubeadm reset
rm -rf /etc/kubernetes
4.非root用户操作 kubectl
部署成功后,如果我们想使用非root用户操作
kubectl
,可以使用以下命令,这也是 kubeadm init
输出的一部分
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
六、node节点执行join
1.在node节点执行命令
kubeadm join 192.168.20.5:6443 --token blolnk.f5g0d2nf1uqmak48 --discovery-token-ca-cert-hash sha256:a7e4bee8d61d2c70f394512ea3e170a529470700ccab065125a50e58d15db1d9
备注:
该命令在执行完 init 命令后会打印出,也即 5.2 的成功标志。
2.查看节点状态
在 master 节点查看节点状态:
root@master:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 50m v1.19.3
node NotReady <none> 3m52s v1.19.3
可以看到所有节点都处于 未就绪 状态。
七、搭建 flannel 网络集群
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
此时再次查看节点状态,全部已就绪:
root@master:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 79m v1.19.3
node Ready <none> 33s v1.19.3
备注:
如果出现以下报错:
Unable to connect to the server: read tcp 192.168.20.5:37246->151.101.228.133:443: read: connection reset by peer
可以安装
apt-get install ca-certificates
和apt-get install ssl-cert
解决。
参考资料:
https://www.cnblogs.com/xiaoxuebiye/p/11256292.html
https://www.cnblogs.com/rainingnight/p/using-kubeadm-to-create-a-cluster-1-13.html
https://www.cnblogs.com/rainingnight/p/using-kubeadm-to-create-a-cluster.html