此文是单机部署,只有master节点,并且在master上跑pod。
一、前置条件:如果想要安装顺利,请科学上网。
在安装过程中需要的镜像文件会自动下载,也不排除有些镜像下载失败,这时候需要你自己想办法使用docker pull对应版本的组件镜像。
二、安装docker(详见官方https://docs.docker.com/install/linux/docker-ce/ubuntu/)
没有安装curl工具,先安装
apt-get update && apt-get install -y apt-transport-https curl
如果有旧版本需要卸载
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install\apt-transport-https\ca-certificates\curl\software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
x86_64 或者 amd64平台用如下命令
$ sudo add-apt-repository\"deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release-cs) \ stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
上面这条命令将为你安装最新版本的docker
如果想要安装指定版本的docker命令如下
$ apt-cache madison docker-ce
docker-ce | 18.09.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
先查看有哪些可用版本,如上列出了一条,可以使用下面的命令指定版本 docker-ce=18.03.0~ce-0~ubuntu
$ sudo apt-get install docker-ce=
卸载docker的方法
$ sudo apt-get purge docker-ce
$ sudo rm-rf/var/lib/docker
三、安装kubeadm
Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。
关闭Swap
swapoff -a
vi /etc/fstab
注释掉swap
#UUID=7bff6243-324c-4587-b550-55dc34018ebf swap swap defaults 0 0
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
$ cat <
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
更新一下源,安装kubelet kubeadm kubectl
apt-get update
apt-get install -y kubelet kubeadm kubectl
或者
apt-mark hold kubelet kubeadm kubectl
我们这里网络使用flannel进行管理,所以初始化 指定10.244.0.0/16(如果使用 Calico 初始化参数用 --pod-network-cidr=192.168.0.0/16)
kubeadm init --kubernetes-version=v1.13.2 --pod-network-cidr=10.244.0.0/16
初始过程会输出一堆信息,关键的信息如下
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
上面的命令是配置常规用户如何使用kubectl访问集群,其中还包含TLS认证信息,如果不配置无法访问k8的kube-apiserver
四、安装Pod Network(如果不安装k8s的coredns 无法正常running)
安装flannel 官方说明
For Kubernetes v1.7+ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
最好是下载到本地,后期不能科学上网时需要使用kubeadm重置安装也可以直接使用该yaml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
五、问题解决
到这里,可以用kubectl get pods --all-namespaces 查看一下k8的pod都处于running状态了没。
这时你的coredns可能始终处于pending状态。
解决方法:
sudo rm -f /etc/resolv.conf # Delete the symbolic link
sudo nano /etc/resolv.conf # Create static file
# Content of static resolv.conf
nameserver 8.8.4.4
nameserver 8.8.8.8
详见https://askubuntu.com/questions/627899/nameserver-127-0-1-1-in-resolv-conf-wont-go-away/627900#627900
把原来的/etc/resolv.conf删掉,重新创建文件后需要重启服务器
有时重启服务器也无法解决,那么就只能kubeadm reset -f重置,再执行一次初始化的步骤
k8s只有master节点时,无法启动pod问题
master节点禁止运行pod,为了避免master节点的资源被耗尽导致整个集群出现问题
测试环境可以放开该限制,执行如下指令
kubectl taint nodes --all node-role.kubernetes.io/master-
如果需要恢复限制,使用如下脚本
node-role.kubernetes.io/master="":NoSchedule
祥见
https://stackoverflow.com/questions/49694230/kubeadm-and-the-risks-of-scheduling-pods-on-master-node-pods-always-pending