Kubernetes(K8S) 入门进阶实战完整教程-02k8s集群环境的搭建

本章主要介绍如何搭建Kubernetes的集群环境

环境规划

  1. 集群类型
    ● Kubernetes集群大致分为两类:一主多从和多主多从。
    ● 一主多从:一个Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境。
    ● 多主多从:多台Master和多台Node节点,搭建麻烦,安全性高,适合用于生产环境。
    为了测试方便,本次搭建的是一主多从类型的集群。
  2. 安装方式
    ● kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包。
    ● ① minikube:一个用于快速搭建单节点的kubernetes工具。
    ● ② kubeadm:一个用于快速搭建kubernetes集群的工具。
    ● ③ 二进制包:从官网上下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效。
    们需要安装kubernetes的集群环境,但是又不想过于麻烦,所以选择kubeadm方式
  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硬盘 |

环境搭建

本次环境搭建需要三台CentOS服务器(一主二从),然后在每台服务器中分别安装Docker(20.10.16)、kubeadm(1.24.0)、kubectl(1.24.0)和kubelet(1.24.0)。

环境初始化

注意:三台机器上需要都执行下面的步骤

  1. 检查操作系统的版本
    kubeadm的方式安装kubernetes集群要求centos必须大于等于7.5版本
    cat /etc/centos-release
  2. 主机名解析
    为了方便后面集群节点间的直接调用,需要配置一下主机名解析,企业中推荐使用内部的DNS服务器。
cat >> /etc/hosts << EOF
192.168.10.100 master
192.168.10.101 node1
192.168.10.102 node2
EOF
  1. 时间同步
    kubernetes要求集群中的时间节点必须精确一致,这里直接使用chronyd服务从网络同步时间
systemctl start chronyd  // 使用chronyd从网络同步时间
systemctl enable chronyd  // 设置开机自启动
date  // 查看三台机器的时间是否一致
  1. 禁用iptables和firewalld服务
    kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟她们混淆,直接关闭系统的规则
  • 关闭firewalld服务
systemctl stop firewalld  // 关闭防火墙
systemctl disable firewalld
  • 关闭iptables服务(由于我们安装的这个系统没有iptables,所以这两步可以省略)
systemctl stop iptables
systemctl disable iptables
  1. 禁用selinux
    selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
# 编辑/etc/selinux/config文件,修改SELINUX的值为disabled
# 注意修改完毕之后,需要重启linux服务
SELINUX=disabled
  1. 禁用swap分区
    swap分区指的是虚拟内存分区,它的作用是在物理内存使用完毕之后,将磁盘空间虚拟成内存来使用,
    启用swap设备会对系统性能产生非常负面的影响,因此Kubernetes要求每个节点都禁用swap设备,
    但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
# 编辑分区配置文件/etc/fstab, 注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
UUID=2b656af8-658c-4698-a3a1-30f715017156 /boot
xfs     defaults        0 0
# /dev/mapper/centos-swap swap                    swap    defaults
  1. 修改linux的内核参数
# 修改linux内核参数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 重新加载配置,注意在终端中执行
sysctl -p

# 加载网桥过滤模块
modprobe br_netfilter

# 查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter
  1. 配置ipvs功能
    在kubernetes中service有两种代理模型,一种是基于iptables的,另一种是基于ipvs的,
    两者比较的话,ipvs的性能要更高一些,但是如果要使用它,需要手动载入ipvs模块
# 1. 安装ipset和ipvsadm
yum -y install ipset ipvsadm

# 2. 添加需要加载的模块写入脚本文件
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

# 3. 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules

# 4. 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules

# 5. 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
  1. 重启服务器
    上面8步完成之后,需要重启linux服务器
    reboot

集群所需组件安装

注意:三台服务器上都需要执行

  1. 安装docker
# 1. 切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2. 查看当前镜像源中支持的docker版本
yum list docker-ce --showduplicates

# 3. 安装特定版本的docker-ce
# 必须指定--setopt=obsoletes=0,否则yum会自动安装更高版本
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 4. 添加一个配置文件
# docker在默认情况下使用Cgroup Driver为cgroupfs, 而kubernetes推荐使用systemd来代替cgroupfs
mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://3b8ygbtk.mirror.aliyuncs.com"]
}
EOF

# 5. 启动docker
systemctl start docker
systemctl enable docker
  1. 安装kubernetes组件
# 由于kubernetes的镜像源在国外,非常慢,这里切换成国内的阿里云镜像源
# 编辑/etc/yum.repos.d/kubernetes.repo, 添加下面配置
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# 安装kubeadm kubelet kubectl
# 由于版本更新频繁,这里指定版本号部署:
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 配置kubelet的cgroup
# 为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容:
# 编辑/etc/sysconfig/kubelet, 添加下面配置(原有文件里面有一行直接删除掉就可以)
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 设置kubelet开机自启,由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet

集群安装

  1. 准备集群镜像
    注意:准备集群镜像需要在3台机器上全部执行
# 在安装kubernetes集群之前,必须要提前准备好集群所需的镜像,所需可以通过下面命令查看
kubeadm config images list

# 下载镜像
# 此镜像在kubernetes仓库中,由于网络原因无法下载,下面提供了一种替代方案
images=(
    kube-apiserver:v1.17.4
    kube-controller-manager:v1.17.4
    kube-scheduler:v1.17.4
    kube-proxy:v1.17.4
    pause:3.1
    etcd:3.4.3-0
    coredns:1.6.5
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
  1. 下面开始对集群进行初始化,并将node节点加入到集群当中
    注意:下面的操作只需要在master节点上操作即可
# 创建集群
kubeadm init \
  --kubernetes-version=v1.17.4 \
  --pod-network-cidr=10.244.0.0/16 \
  --service-cidr=10.96.0.0/12 \
  --apiserver-advertise-address=192.168.10.100

# 看到这句说,说明集群初始化成功:`Your Kubernetes control-plane has initialized successfully!`

# 根据k8s提示,创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 根据k8s提示,将另外两个node节点加入到集群当中
# 注意下面的命令只在两个node节点中执行
kubeadm join 192.168.10.100:6443 --token du7irt.08qlafw25zwfawde \
    --discovery-token-ca-cert-hash sha256:69e684ff624fd4d87f60f7bc65dcc54633517bcb161b3229613de4874bc97a09

# 查看集群状态
kubectl get nodes

网络插件安装

kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次使用flannel
注意:下面操作依旧只在master节点执行即可,插件使用的是DaemonSet控制器,它会在每个节点上都运行

# 获取flannel的配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 千万注意:有的文章说,修改文件中的quay.io仓库为quay-mirror.qiniu.com,前外不要修改,因为quay-mirror.qiniu.com根本访问不了了
# 如果网络允许的话,直接wget下载的直接使用就可以了(亲测有效),改了反而报错。

# 使用配置文件启动flannel
kubectl apply -f kube-flannel.yml

# 稍等片刻,再次查看集群节点状态
kubectl get nodes

# 查看部署CNI网络插件进度
kubectl get pods -n kube-system

# 查看集群健康状态
kubectl get cs

# 查看集群信息
kubectl cluster-info

至此kubernetes的集群环境搭建完成。

集群环境测试-服务部署

在Kubernetes集群中部署一个Nginx程序,测试下集群是否正常工作。

# 部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看服务状态
kubectl get pods,svc

# 使用浏览器访问一下试试吧:
# 注意: ip地址就是node节点的ip地址,port是上面查看服务状态获取到的端口
http://192.168.10.100:31704/
posted @ 2022-06-06 21:40  专职  阅读(553)  评论(0编辑  收藏  举报