【K8s】Kubernetes入门-02
环境规划
集群类型
Kubernetes集群大体上分为两类:
一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境
多主多从:多台Master节点和多台Node节点,搭建复杂,安全性高,适合用于生产环境
安装方式
Kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包
- minikube:一个用于快速搭建单节点kubernetes的工具
- kubeadm:一个用于快速搭建kubernetes集群的工具
- 二进制包:从官网下载每个组件的二进制包,依次安装,有助于理解kubernetes组件
说明:演示选择使用kubeadm方式安装集群环境
主机规划
主机 | IP | 操作体统 | 配置 |
---|---|---|---|
master | 192.168.2.94 | CentOS7.6 | 4U8G 50G |
node1 | 192.168.2.95 | CentOS7.6 | 4U8G 50G |
node2 | 192.168.2.96 | CentOS7.6 | 4U8G 50G |
环境搭建
本次环境需要安装三台CentOS服务器(一主二从),然后在每台服务器分别安装Docker、Kubeadm、Kubelet、Kubectl
主机安装
安装三台服务器
环境配置
检查系统版本
1 | [root@master ~]# cat /etc/redhat-release |
此方式安装Kubernetes集群要求CentOS版本在7.5以上
hosts配置
配置主机名解析,有DNS也可以直接配置DNS,方便后面集群节点之间的调用
1 | cat <<EOF>>/etc/hosts |
时间同步配置
集群中节点的时间必须精确一致
使用 chronyd
1 | yum install -y chrony |
使用 ntp
1 | yum install -y ntp |
禁用iptable和firewalld服务
Kubernetes和Docker 在运行的中会产生大量的iptables
规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
关闭防火墙
1 | systemctl stop firewalld |
1 | [root@master ~]# systemctl stop firewalld |
关闭iptables服务
1 | [root@master ~]# systemctl stop iptables |
selinux 配置
selinux
是linux
系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
需要重启生效
1 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config |
禁用swap分区
swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响
Kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
1 | # 编辑分区配置文件/etc/fstab,注释掉swap分区一行 |
修改linux的内核参数
1 | # 修改linux的内核采纳数,添加网桥过滤和地址转发功能 |
配置ipvs功能
在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
1 | # 1.安装ipset和ipvsadm |
重启服务器
1 | reboot |
检查
1 | [root@master ~]# getenforce |
安装Docker
1 | curl -sSL https://get.daocloud.io/docker | sh |
安装Kubernetes组件
添加源
1 | vi /etc/yum.repos.d/kubernetes.repo |
安装kubeadm、kubelet和kubectl
1 | [root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y |
配置kubelet的cgroup
1 | cat <<EOF> /etc/sysconfig/kubelet |
设置kubelet开机自启
1 | systemctl start kubelet |
1 | [root@node1 ~]# systemctl enable kubelet |
准备集群镜像
查看镜像
在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
1 | [root@master ~]# kubeadm config images list |
下载镜像
国内无法拉取上述镜像,可以通过aliyun
代理拉取,也可以直接执行下面语句
我先在香港服务器上拉取然后推送的Docker Hub
1 | images=( |
集群初始化
对集群进行初始化,并将node节点加入到集群中
master
节点执行
创建集群
1 | kubeadm init \ |
重置集群
1 | kubeadm reset -f |
创建文件
1 | mkdir -p $HOME/.kube |
加入集群
1 | kubeadm join 192.168.2.94:6443 --token dl0jdc.tby7pc1yd2q37wws \ |
查看节点
1 | kubectl get nodes |
安装网络插件
Kubernetes支持多种网络插件,比如flannel、calico、canal等
只需要在master节点执行即可,插件使用的是DaemonSet的控制器,会在每个节点运行
下载配置文件
获取配置文件,根目录即可/root/
1 | wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
启动flannel
1 | kubectl apply -f kube-flannel.yml |
查看节点状态
稍等片刻,集群node节点Ready
1 | kubectl get nodes |
至此,Kubernetes集群环境搭建完成
服务部署
在K8s集群中部署Nginx服务,测试集群是否正常
master节点执行
Nginx服务
创建服务
1 | kubectl create deployment nginx --image=nginx:1.14-alpine |
暴露端口
1 | kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort |
查看服务
1 | kubectl get pod |
访问服务
使用任意node IP 加端口访问
192.168.2.94:32148
参考文档: