1.各相关组件及主机环境
centos、docker-ce、kubernetes1.12
集群主机环境
主机ip | 主机名 | 角色 |
---|---|---|
10.57.31.22 | k8s-master | master |
10.57.31.23 | k8s-node-1 | node1 |
10.57.31.24 | k8s-node-2 | node2 |
将上面的主机配置添加到master和node上的/etc/hosts中
2.主机系统环境设置
- 关闭防火墙服务
systemctl stop firewalld.service iptables.service
systemctl disable firewalld.service
systemctl disable iptables.service
- 关闭并禁用SELinux
setenforce 0
//彻底禁用SELinux
sed -i 's@^(SELINUX=).*@\1disabled@' /etc/sysconfig/selinux
- 禁用swap设备(可选)
swapoff -a
而后编辑/etc/fstab配置文件,注释用户挂载swap设备的所有行
3.docker安装
master和node上都需要安装
wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install docker-ce
如果安装中出现Transaction check error:错误,说明之前安装过docker未清理干净,需要执行下 sudo yum erase docker-common-2:1.13.1-96.gitb2f74b2.el7.centos.x86_64(根据报错是什么版本后面就写什么 );安装下载不成功,执行yum clean all试试
kubeadm构建集群的过程中需要到gcr.io获取docker镜像,所以需要配置能够访问的http代理,或者从自己的Registry仓库拉取镜像,代理的方法是在[service]配置端中添加类似如下格式的配置项:Environment="HTTP-PROXY=http://IP:PORT"或Environment="HTTPS-PROXY=https://IP:PORT,(后面我们会介绍另外一种拉取gcr.io镜像的方法)
docker自1.13起自动设置iptables的FORWARD默认策略为DROP,这会影响k8s的报文转发,因此,需要早docker启动后,更改为ACCEPT;方式为修改/usr/lib/systemd/system/docker.service文件,在"ExecStat=/usr/bin/dockerd"一行之后新增一行如下内容:
EexcStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
温馨提示:docker的镜像下载慢,需要更改daemon.json,在/etc/docker/daemon.json文件(没有则创建),文件内容为
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
后面的地址可以使用别的快的,国内的;这里是中国科技大学的镜像加速服务
然后重启下docker
systemctl daemon-reload
systemctl start docker.service
systemctl enable docker.service
4.安装kubelet及kubeadm
采用阿里云仓库中rpm方式安装;还有其他方式自行研究下
4.1配置yum仓库
编辑配置文件/etc/yum.repos.d/kubernetes.repo,内容如下:
[kubernetes]
name=Kubernetes
baseurl= https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey= https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
4.2然后执行命令安装程序包
master上安装kubelet、kubeadm、kubectl
node上安装kubelet、kubeadm
yum install kubelet kubeadm kubectl
4.3
关闭下kubelet需要强制关闭swap的需求,编辑/etc/sysconfig/kubelet,设置参数:
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
然后
systemctl restart kubelet.service
systemctl enable kubelet.service
4.4提前下载下gcr.io的镜像
先看下需要哪些镜像,kubeadm config images list
image.png
我们通过 docker.io/mirrorgooglecontainers 中转一下
脚本如下:
//下载镜像
kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#docker.io/mirrorgooglecontainers#g' |sh -x
//打tag
docker images |grep mirrorgooglecontainers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#mirrorgooglecontainers#k8s.gcr.io#2' |sh -x
//移除mirrorgooglecontainers的镜像
docker images |grep mirrorgooglecontainers |awk '{print "docker rmi ", $1":"$2}' |sh -x
//coredns需要单独下载
docker pull coredns/coredns:1.3.1
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker rmi coredns/coredns:1.3.1
可惜的是最新版本的1.15.2在中转站里面没有,我只下载到了这些:
image.png
还剩下controller-manager和scheduler需要下载,采取另外一种方式手动下载这两个,参考我的另外一片文章https://www.jianshu.com/p/447130682e08
(也可以使用其他能够下到镜像的方式)
最后我们把镜像重新docker tag成kubeadm需要的镜像,最终结果
image.png
5.集群初始化(master)
采用命令行方式
说明:
--kubernetes-version: 正在使用的k8s的版本号,可以看下相关docker镜像的版本
--pod-network-cidr: Pod网络的地址范围;
--service-cidr:的网路地址范围
--apiserver-advertise-address: Apiserver对外服务的地址,一般为master的ip
kubeadm init --kubernetes-version=v1.15.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=10.57.31.22 --ignore-preflight-errors=Swap
输出结果末尾有类似:kubeadm join 10.57.31.22:6443 --token ecc3mr.wdbc1ptao2ep6h95
--discovery-token-ca-cert-hash sha256:40045492e5e0c54ddb9b2645b989337bb29ea76e7025f38ef7465caa477dcd8e 这样的命令,记录下来用来后续添加node到集群中
5.1设定kubectl的配置文件
kubeadm会自动生成一个/etc/kubernetes/admin.conf;然后kubectl默认会使用$HOME/.kube/config作为凭据,所以我们执行
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
查看下状态
//获取组件状态
kubectl get cs
//获取节点状态,(not ready 因为还没有安装网络插件)
kubectl get nodes
6.部署网络插件Flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
完成之后稍微等一会再通过kubectl get nodes就能看到Ready的master节点了
7.添加Node到集群中
使用kubeadm init输出末尾的命令,加上个--ignore-preflight-errors=Swap;到Node节点上执行命令:
kubeadm join 10.57.31.22:6443 --ignore-preflight-errors=Swap --token ecc3mr.wdbc1ptao2ep6h95 --discovery-token-ca-cert-hash sha256:40045492e5e0c54ddb9b2645b989337bb29ea76e7025f38ef7465caa477dcd8e
网友评论