前言:node
k8s是Kubernetes的简称,由于K和S之间有8个字母,因此才会被称为k8s。linux
k8s最初是在Google公司内部使用了10多年的技术,它的前身是叫作Borg(博格),直到2015年才被Google公司捐赠为开源项目。git
若是以前咱们有接触过OpenStack,那么应该知道管理VM虚拟机资源能够用OpenStack。那么管理容器所对应的开源平台是什么呢?k8s就是其中之一,在k8s以前也有不少容器管理平台,有docker自身的docker swarm,也有apache推出的Mesos等等。相比较而言,虽然k8s比其余推出的晚了些,可是丝绝不影响其火爆程度,除了其功能强大外,更况且它还有个好爹。github
关于k8s更详细的介绍,能够移步至k8s中文文档或者k8s官方网站 ,以便查看更多资料。docker
接下来开始安装部署k8s。shell
博文大纲:
1、环境准备
2、部署前准备apache
- 一、检查docker版本、关闭防火墙及Selinux、清空iptables规则、禁用Swap交换分区
- 二、配置ssh免密登陆、主机名解析及yum源
- 三、打开iptables桥接功能及路由转发
3、配置k8s群集- 一、安装部署k8s相关工具
- 二、初始化k8s集群
- 三、配置master节点状态
- 四、配置node01及node02加入master群集
- 五、部署后的优化配置
注:上述三台centos 7.3服务器,均运行docker服务,若是是测试环境,那么内存最少2G,CPU至少双核,而且docker服务的版本不建议太高,最好是18.09及如下。vim
如需部署docker服务,可参考博文:Docker的安装详细配置centos
注:如下操做须要在三台docker主机上分别配置一次,哪怕是在生产环境,都须要进行如下操做,由于k8s有它本身的安全策略。api
[root@master ~]# docker -v #确认docker版本 Docker version 18.09.0, build 4d60db4 #关闭防火墙 [root@master ~]# systemctl stop firewalld [root@master ~]# systemctl disable firewalld #关闭Selinux [root@master ~]# setenforce 0 [root@master ~]# vim /etc/sysconfig/selinux SELINUX=disabled #将此处改成disabled [root@master ~]# iptables -F #清空iptables规则 #重启docker服务 [root@master ~]# systemctl daemon-reload [root@master ~]# systemctl restart docker #禁用swap交换分区 [root@master ~]# swapoff -a #临时禁用swap [root@master ~]# vim /etc/fstab #打开自动挂载的配置文件,将swap配置项注释掉 #/dev/mapper/cl-swap swap swap defaults 0 0 #就注释掉上面那行 [root@node02 ~]# mount -a #从新加载挂载的配置文件 [root@node02 ~]# free -h #确认输出的swap行以下(都为0): Swap: 0B 0B 0B
注:如下没有特别说明的操做,在master主机上操做便可
[root@master ~]# tail -3 /etc/hosts #在该文件添加三台主机的解析 192.168.20.6 master 192.168.20.7 node01 192.168.20.8 node02 #配置ssh免密登陆(为了方便在主机间复制配置文件,可不作) [root@master ~]# ssh-keygen -t rsa [root@master ~]# ssh-copy-id node01 [root@master ~]# ssh-copy-id node02 #将更改后的hosts文件发送到node01及node02 [root@master ~]# scp /etc/hosts node01:/etc/ [root@master ~]# scp /etc/hosts node02:/etc/ #接下来配置yum源 [root@master ~]# vim /etc/yum.repos.d/kubernetes.repo #编辑yum文件 [kubernetes] name=kubneters baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 #以上url是阿里开源镜像站,可复制网址自行查看 [root@master yum.repos.d]# yum repolist #查看刚刚配置的yum源中有没有可用的包 kubernetes kubneters 421 #返回的这一行不可为0 [root@master yum.repos.d]# yum makecache #制做yum元数据缓存 #将yum源的配置文件复制到另外两台节点主机上 [root@master ~]# scp /etc/yum.repos.d/kubernetes.repo node01:/etc/yum.repos.d/ [root@master ~]# scp /etc/yum.repos.d/kubernetes.repo node02:/etc/yum.repos.d/ #在另外两台主机上,都需执行如下两条命令 [root@node01 ~]# yum repolist kubernetes kubneters 421 #返回的这一行不可为0 [root@node01 ~]# yum makecache
一样,没有特别说明的配置,在master上进行配置便可。
#打开iptables桥接功能 [root@master ~]# vim /etc/sysctl.d/k8s.conf #写入如下配置 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 [root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf #刷新配置 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 # PS:若是报错“找不到文件”,须要执行下面的命令以便加载一个模块。 [root@master ~]# modprobe br_netfilter #加载br_netfileter模块 #将配置的k8s.conf文件复制到另外两台节点 #将配置文件复制到另外两台节点后,须要在node01及02上分别执行下面的命令进行刷新 [root@node02 ~]# sysctl -p /etc/sysctl.d/k8s.conf #刷新配置文件 #接下来开启路由转发(三台docker主机上都须要进行如下操做) [root@master ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #开启路由转发 [root@master ~]# sysctl -p #刷新配置 net.ipv4.ip_forward = 1
配置至此,部署前的工做就完成了。
在进行接下来的操做前,须要先下载我提供的镜像。
注:如下操做在master主机上进行
[root@master ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0 #安装k8s的master所需组件 [root@master ~]# systemctl enable kubelet #将kubelet加入开机自启,但如今不要启动 [root@master ~]# mkdir images [root@master ~]# cd images/ [root@master images]# rz #上传我提供的全部镜像包,共8个镜像包 [root@master images]# ls #确认上传的镜像包 coredns-1-3-1.tar kube-proxy-1-15.tar etcd-3-3-10.tar kube-scheduler-1-15.tar kube-apiserver-1-15.tar myflannel-11-0.tar kube-controller-1-15.tar pause-3-1.tar #接下来导入上传的镜像包到docker镜像中 [root@master images]# docker load < coredns-1-3-1.tar [root@master images]# docker load < etcd-3-3-10.tar [root@master images]# docker load < kube-apiserver-1-15.tar [root@master images]# docker load < kube-controller-1-15.tar [root@master images]# docker load < kube-proxy-1-15.tar [root@master images]# docker load < kube-scheduler-1-15.tar [root@master images]# docker load < pause-3-1.tar [root@master images]# docker load < myflannel-11-0.tar
[root@master images]# kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.224.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap <!-- 这里指定的版本必须和前面yum安装的版本一致。指定的两个网络则是官方建议使用的网段 若是执行上述命令后,返回CPU相关的报错信息,那么须要调大CPU的核心数 初始化成功后,首先复制下面返回的这条命令,并妥善保存 若初始化失败,能够执行kubeadm reset进行重置群集 --> kubeadm join 192.168.20.6:6443 --token xfp7g5.6f2bdfjybt8a1j7r \ --discovery-token-ca-cert-hash sha256:17895c549344a83daae4318360dc9c9212b5dc3b1fb7d79ef84a640c63e489e2 <!-- 上面这条命令是用来其余节点加入到当前k8s群集中须要执行的 一旦丢失,特别麻烦,而且只有24小时有效期,每次初始化群集后产生的都不同 --> <!-- 接下来呢,依次执行返回的其余指令,以下(因为我是root用户,因此就省略了sudo指令): --> [root@master images]# mkdir -p $HOME/.kube [root@master images]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master images]# chown $(id -u):$(id -g) $HOME/.kube/config
返回的信息截图以下,供参考:
[root@master images]# kubectl get nodes #查看群集节点信息 NAME STATUS ROLES AGE VERSION master NotReady master 14m v1.15.0 #能够看到master当前状态为未准备
接下来能够去github官网进行如下操做以便查看相应的命令:
点击进入后,下拉页面到如下位置,并复制指定的命令到master节点执行一下:
[root@master images]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml #执行在github官网复制的命令
以上只是方式之一,在网络情况良好的状况下建议使用上述方法(调用远端文件执行一下),若网速较差,建议使用如下方法:
[root@master images]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml #将github官网指定的.yml配置文件下载到本地 [root@master images]# ls | grep flannel.yml #肯定下载到了当前目录 kube-flannel.yml [root@master images]# kubectl apply -f kube-flannel.yml #指定下载的.yml文件执行相应命令
上述方法,二选一进行配置便可。
[root@master images]# kubectl get nodes #再次查看master状态,发现已经成为了“Ready” NAME STATUS ROLES AGE VERSION master Ready master 30m v1.15.0 [root@master images]# ls /etc/kubernetes/ #k8s的配置文件目录 [root@master images]# ls /etc/kubernetes/manifests/ #k8s的.yaml文件存放目录
如下操做须要在node01及node02分别执行一次
[root@node01 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 #安装k8s相关组件 [root@node01 ~]# systemctl enable kubelet.service #设置为开机自启 [root@node01 ~]# mkdir images [root@node01 ~]# cd images/ [root@node01 images]# rz #上传我提供的镜像文件,共三个,是下面 ls 命令查看的三个 [root@node01 images]# ls #须要上传的镜像文件以下 kube-proxy-1-15.tar myflannel-11-0.tar pause-3-1.tar [root@node01 images]# docker load < kube-proxy-1-15.tar [root@node01 images]# docker load < myflannel-11-0.tar [root@node01 images]# docker load < pause-3-1.tar [root@node01 images]# kubeadm join 192.168.20.6:6443 --token xfp7g5.6f2bdfjybt8a1j7r --discovery-token-ca-cert-hash sha256:17895c549344a83daae4318360dc9c9212b5dc3b1fb7d79ef84a640c63e489e2 #执行master初始化群集时返回的命令,以便加入到master的群集中
返回如下信息,则表示加入成功:
自行将上述配置在node02主机上配置一次便可
当在node01及node02依次配置完成后,便可在master上进行查看节点状态,以下:
[root@master images]# kubectl get nodes #在master上查看节点信息都为“Ready” NAME STATUS ROLES AGE VERSION master Ready master 51m v1.15.0 node01 Ready <none> 4m19s v1.15.0 node02 Ready <none> 4m13s v1.15.0
其实配置至此,K8s已经完成了,可是为了之后更为方便的使用k8s,建议优化如下几项:
- 设置table键的默认间距;
- 设置kubectl命令自动补全;
- 优化开机自启配置。
[root@master images]# cd #切换至宿主目录 [root@master ~]# echo "set tabstop=2" >> .vimrc #将此参数写入.vimrc文件 [root@master ~]# bash #切换shell环境,使更改生效
[root@master ~]# yum -y install bash-completion [root@master ~]# source /usr/share/bash-completion/bash_completion [root@master ~]# source <(kubectl completion bash) [root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
master主机操做以下:
[root@master ~]# kubectl get pod -n kube-system #查看pod资源,相似于docker中的容器,确保返回的信息都是running #“-n kube-system”:是k8s的名称空间
上述命令返回的信息以下:
master和node节点上都须要进行如下操做,以便设置为开机自启:
[root@master ~]# systemctl enable kubelet [root@master ~]# systemctl enable docker
设置为开机自启后,k8s群集的配置基本完成了,如今能够重启一下这三台服务器,若是重启后,执行下面的命令,状态都仍是running,则表示绝对没有问题了。
[root@master ~]# kubectl get pod -n kube-system #重启后验证状态是否还都是running
———————— 本文至此结束,感谢阅读 ————————