本篇文章是基于kubernetes—CentOS7安装kubernetes1.11.2图文完整版这篇文章而写,主要是为了记录安装成功的过程加上自己的一些理解,为了避免以后遗忘。
设置主机名
这样就可以将主机名设置成自己想要的名字,方便查看。我把master节点设置为k8s-master,从节点设置为k8s-node1
分别在两台机器上进行设置,下面用master节点来举例
hostname k8s-master
编辑对应关系,首先用ifconfig命令来获取ip地址,然后使用命令
vi /etc/hosts
输入
192.168.194.135 k8s-master
关闭防火墙
CentOS Linux7中默认开启了防火墙,在一个安全的内部网络环境中可以关闭防火墙服务
sudo systemctl stop firewalld.service #停止firewall
sudo systemctl disable firewalld.service #禁止firewall开机启动
sudo firewall-cmd --state #查看防火墙状态
这时可以看到防火墙的状态是not running
在主机上禁用SELinux
让容器可以读取主机文件系统
sudo setenforce 0
或者也可以用修改系统文件的方式修改
sudo vi /etc/selinux/config
#SELINUX修改为disabled
SELINUX=disabled
创建/etc/sysctl.d/k8s.conf文件
sudo vi /etc/sysctl.d/k8s.conf
添加如下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
使修改生效,执行
sudo sysctl -p /etc/sysctl.d/k8s.conf
关闭swap
swapoff -a
配置yum源
因为用k8s官网给的yum源国内访问不了,所以用的是阿里云的yum仓库镜像
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm和相关工具
yum install -y docker kubelet kubeadm kubectl kubernetes-cni
如果本来就已经安装了Docker,那取消命令中的docker。
安装成功了后,启动Docker服务和kubelet服务,并且设置成开机自动启动
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
下载kubernetes相关镜像
kubeadm默认从gcr.io中下载kubernetes相关镜像,但是我们无法访问gcr.io的网络环境,所以采用了Daocloud来获取镜像加速服务
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中 ,然后重启docker来使得docker生效
systemctl restart docker #重启docker
这时可能会出现重启失败的错误,需要去检查配置文件 /etc/docker/daemon.json,使得文件中的内容为:
手动下载相关镜像
接下来去手动下载kubernetes相关镜像,下载地址是https://hub.docker.com/r/warrior
docker pull mirrorgooglecontainers/kube-apiserver:v1.13.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.2
docker pull mirrorgooglecontainers/kube-scheduler:v1.13.2
docker pull mirrorgooglecontainers/kube-proxy:v1.13.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
docker pull coredns/coredns:1.2.6
修改镜像名,以供kubeadm使用
docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.13.2 k8s.gcr.io/kube-proxy:v1.13.2
docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.13.2 k8s.gcr.io/kube-scheduler:v1.13.2
docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.13.2 k8s.gcr.io/kube-apiserver:v1.13.2
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.13.2 k8s.gcr.io/kube-controller-manager:v1.13.2
docker tag docker.io/mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag docker.io/coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
运行kubeadm init安装master
kubeadm init --kubernetes-version = 1.13.2
运行
安装Node,加入集群
安装kubeadm和相关工具
此部分内容和上文中对应内容一致
加入集群
kubeadm join 192.168.194.128:6443 --token 7orz4v.q5landhrmjc844ep --discovery-token-ca-cert-hash sha256:9c7f5c99293d7978a2ce9e0d7900715e0b9241526f69da237b74cad419470864
- 这上面的token及ip地址均为master节点安装成功界面中的提示。
- 获取ca证书sha256编码hash值,在master节点上输入命令
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
输入后可能会提示你swap没有关闭,输入命令来关闭就行,命令如下
swapoff -a
再次join,发现加入成功
安装网络插件
添加节点后,通过kubectl get nodes命令,可能会发现报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?
输入命令
export KUBECONFIG=/etc/kubernetes/admin.conf
解决了这个问题,但是Kubernetes提示Master节点为NotReady的状态,所以要安装网络插件
这里选择的flannel插件
mkdir -p ~/k8s/
cd ~/k8s
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
这时候使用kubectl get pod –all-namespaces -o wide确保所有的Pod都处于Running状态。
这里出了一个错误,kube-flannel-ds-amd64节点出现了init错误,使用
yum install flannel
进行安装flannel,问题得到的解决,与此同时可以看到master节点已经是ready状态了
手动配置副节点镜像
这时候发现副节点还是notready的状态,查看pod的状态,发现卡在ContainerCreating状态和Init:0/1,这是因为副节点镜像没有获取到的原因,按照上文手动安装镜像的内容重新进行安装。而flannel则是在master节点输入docker image命令查看镜像版本,然后手动下载就可以。
成功
准备好镜像之后发现成功: