k8s集群环境的搭建
1 环境规划
1.1 集群类型
●Kubernetes集群大致分为两类:一主多从和多主多从。
●一主多从:一个Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境。
●多主多从:多台Master和多台Node节点,搭建麻烦,安全性高,适合用于生产环境。
为了测试方便,本次搭建的是一主多从类型的集群。
1.2 安装方式
●kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包。
●① minikube:一个用于快速搭建单节点的kubernetes工具。
●② kubeadm:一个用于快速搭建kubernetes集群的工具。
●③ 二进制包:从官网上下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效。
●我们需要安装kubernetes的集群环境,但是又不想过于麻烦,所以选择kubeadm方式。
1.3 主机规划
角色 | IP地址 | 操作系统 | 配置 |
Master | 192.168.18.100 | CentOS7.8+,基础设施服务器 | 2核CPU,2G内存,50G硬盘 |
Node1 | 192.168.18.101 | CentOS7.8+,基础设施服务器 | 2核CPU,2G内存,50G硬盘 |
Node2 | 192.168.18.102 | CentOS7.8+,基础设施服务器 | 2核CPU,2G内存,50G硬盘 |
2 环境搭建
2.1 前言
●本次环境搭建需要三台CentOS服务器(一主二从),然后在每台服务器中分别安装Docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0)。
没有特殊说明,就是三台机器都需要执行。
2.2 环境初始化
2.2.1 检查操作系统的版本
●检查操作系统的版本(要求操作系统的版本至少在7.5以上):
2.2.2 关闭防火墙和禁止防火墙开机启动
●关闭防火墙:
●禁止防火墙开机启动:
2.2.3 设置主机名
●设置主机名:
●设置192.168.18.100的主机名:
●设置192.168.18.101的主机名:
●设置192.168.18.102的主机名:
2.2.4 主机名解析
●为了方便后面集群节点间的直接调用,需要配置一下主机名解析,企业中推荐使用内部的DNS服务器。
2.2.5 时间同步
●kubernetes要求集群中的节点时间必须精确一致,所以在每个节点上添加时间同步:
2.2.6 关闭selinux
●查看selinux是否开启:
●永久关闭selinux,需要重启:
●临时关闭selinux,重启之后,无效:
2.2.7 关闭swap分区
●永久关闭swap分区,需要重启:
●临时关闭swap分区,重启之后,无效::
2.2.8 将桥接的IPv4流量传递到iptables的链
●在每个节点上将桥接的IPv4流量传递到iptables的链:
2.2.9 开启ipvs
●在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块。
●在每个节点安装ipset和ipvsadm:
●在所有节点执行如下脚本:
●授权、运行、检查是否加载:
●检查是否加载:
2.2.10 重启三台机器
●重启三台Linux机器:
2.3 每个节点安装Docker、kubeadm、kubelet和kubectl
2.3.1 安装Docker
●安装Docker:
●设置Docker镜像加速器:
2.3.2 添加阿里云的YUM软件源
●由于kubernetes的镜像源在国外,非常慢,这里切换成国内的阿里云镜像源:
2.3.3 安装kubeadm、kubelet和kubectl
●由于版本更新频繁,这里指定版本号部署:
●为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容:
●设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动:
2.4 查看k8s所需镜像
●查看k8s所需镜像:
2.5 部署k8s的Master节点
●部署k8s的Master节点(192.168.18.100):
●根据提示消息,在Master节点上使用kubectl工具:
2.6 部署k8s的Node节点
●根据提示,在192.168.18.101和192.168.18.102上添加如下的命令:
●默认的token有效期为2小时,当过期之后,该token就不能用了,这时可以使用如下的命令创建token:
2.7 部署CNI网络插件
●根据提示,在Master节点上使用kubectl工具查看节点状态:
●kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,本次选择flannel,如果网络不行,可以使用本人提供的
kube-flannel.yml(5 KB)
,当然,你也可以安装calico,请点这里
calico.yaml(183 KB)
,推荐安装calico。
●在Master节点上获取flannel配置文件(可能会失败,如果失败,请下载到本地,然后安装):
●使用配置文件启动flannel:
●查看部署CNI网络插件进度:
●再次在Master节点使用kubectl工具查看节点状态:
●查看集群健康状况:
3 服务部署
3.1 前言
●在Kubernetes集群中部署一个Nginx程序,测试下集群是否正常工作。
3.2 步骤
●部署Nginx:
●暴露端口:
Shell复制代码
1
kubectl expose deployment nginx --port=80 --type=NodePort
●查看服务状态:
Shell复制代码
1
kubectl get pods,svc
4 kubernetes中kubectl命令自动补全
Shell复制代码
1
yum install -y bash-completion
Shell复制代码
1
source /usr/share/bash-completion/bash_completion
Shell复制代码
1
source <(kubectl completion bash)
Shell复制代码
1
echo “source <(kubectl completion bash)” >> ~/.bashrc
Shell复制代码
1
vim /root/.bashrc
Shell复制代码
1
source /usr/share/bash-completion/bash_completion
Shell复制代码
1
source <(kubectl completion bash)