一篇文章让你精通:Kubernetes·第二章

一篇文章让你精通:Kubernetes·第二章

2.1 环境规划

2.1.1 集群类型

Kubernetes集群大体上分为两类:一主多从多主多从

  • 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合英语测试环境
  • 多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性该,适合用于生产环境
    在这里插入图片描述

注:以下使用的为一主两从类型的集群

2.1.2 安装方式

Kubernetes有多种部署方式,目前主流的方式有Kubeadm、minikube、二进制包

  • Kubeadm:一个用于快速搭建单节点Kubernetes的工具
  • minikube:一个用于快速搭建Kubernetes的工具
  • 二进制包:从官网下载每个组件的二进制包,依次去安装,次方式对于理解Kubernetes组件更加有效
    Kubernetes官网地址传送门

注: 以下使用Kubeadm方式,另外两种方式日后我会单独写文

2.1.3 主机规划
作用IP地址操作系统配置
Master192.168.30.100CentOS 8.3 服务器CPU*2 - 内存3G - 硬盘50G
Node1192.168.30.101CentOS 8.3 服务器CPU*2 - 内存3G - 硬盘50G
Node2192.168.30.102CentOS 8.3 服务器CPU*2 - 内存3G - 硬盘50G

2.2 环境搭建

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

2.2.1 主机安装

安装虚拟机过程中的选择设置:

  • 操作系统环境: CPU(2C) 内存(3G) 硬盘(50G)
  • 语言选择:中文简体
  • 软件选择:服务器
  • 网络配置:如下(!!!请根据自己的NAT模式网段配置)
  • 主机名:Master、Node1、Node2
网络地址192.168.30.100/101/102
子网掩码255.255.255.0
默认网关192.168.30.2
DNS223.5.5.5

在这里插入图片描述

2.2.2 环境初始化
  1. 检查操作系统的版本
# 此方式下安装Kubernetes集群要求Centos版本要在7.5或之上
[root@Master ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011

在这里插入图片描述

  1. 主机名解析

为了方便后面集群节点的之间调用,于此处配置主机名解析,企业中推荐使用内部DNS服务器

#主机名解析 编辑(vim)三台服务器的/etc/hosts文件,添加以下内容
#注:ip地址根据本地IP来,切勿直接复制粘贴以下内容
192.168.30.100 Master
192.168.30.101 Node1
192.168.30.102 Node2
  1. 同步时间

kubernetes要求集群中的节点时间必须精确一直,这里使chronyd服务从网络同步时间
企业中建议配置内部的时间同步服务器
chrony可使用yum 安装yum install -y chrony

# 启动chronyd服务
[root@Master ~]# systemctl start chronyd
#设置chronyd服务开机自启
[root@Master ~]# systemctl enable chronyd
#chronyd服务启动稍等几秒后,使用date命令验证时间
[root@Master ~]# date
  1. 禁用iptables和direwalld服务

Kubernetes和Docker在运行中会产生大量的iptables规则,为了不让系统规则与他们混淆,直接关闭系统的规则

# 1 关闭firewalld服务
[root@Master ~]# systemctl stop firewalld
[root@Master ~]# systemctl disable firewalld
# 2 关闭iptables服务
[root@Master ~]# systemctl stop iptables
[root@Master ~]# systemctl disable iptables
  1. 禁用selinux

selinux是linux系统一下的一个安全服务,若不关闭它,在安装集群中会产生各种各样的问题

#临时关闭,重启后生效
[root@Master ~]# setenforce 0
[root@Master ~]# getenforce	//查看状态
Permissive
#永久关闭
# 编辑(vim) /etc/selinux/config 文件,修改SELINUX的值为disabled
# 注意修改完毕之后需要重启linux服务(步骤9统一重启)
SELINUX=disabled

在这里插入图片描述

  1. 禁用swap分区

swap分区值的是虚拟内存分区,它的作用是物理内存使用完之后,将磁盘空间虚拟成内存来使用
启用swap设备会对系统的性能产生非常负面的影响,因此Kubernetes要求每个节点都要禁用swap设备
但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务(步骤9统一重启)
[root@Master ~]# vim /etc/fstab
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=c13f844c-0091-46e7-baa6-1f984a427afa /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     none                    swap    defaults        0 0
--------------------------------------------------
#/dev/mapper/cl-swap     none                    swap    defaults        0 0

在这里插入图片描述

7.修改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

# 重新加载配置
[root@Master ~]# sysctl -p

# 加载网桥过滤模块
[root@Master ~]# modprobe br_netfilter

# 查看网桥过滤模块是否加载成功
[root@Master ~]# lsmod | grep br_netfilter

在这里插入图片描述

8.配置ipvs功能

在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

# 1.安装ipset和ipvsadm
[root@Master ~]# yum install ipset ipvsadm -y

# 2.添加需要加载的模块写入脚本文件 //shell脚本加载模块
[root@Master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4 #注意高内核版本为nf_conntrack
EOF

# 3.为脚本添加执行权限
[root@Master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules

# 4.执行脚本文件
[root@Master ~]# /bin/bash /etc/sysconfig/modeules/ipvs.modules

# 5.查看对应的模块是否加载成功
[root@Master ~]# lsmod | grep -e -ip_vs -e nf_conntrack_ipv4

在这里插入图片描述

9.完成以上8步后。重启Linux系统

[root@Master ~]# reboot
2.2.3 安装Docker
# 1、切换镜像源
[root@Master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2、查看当前镜像源中支持的docker版本
[root@Master ~]# yum list docker-ce --showduplicates

# 3、安装特定版本的docker-ce
# 必须制定allowerasing,解决依赖冲突问题
[root@Master ~]# yum install docker-ce --allowerasing


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

# 5、启动dokcer
[root@Master ~]# systemctl restart docker
[root@Master ~]# systemctl enable docker

在这里插入图片描述

2.2.4 安装Kubernetes组件
# 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
#2.
cat <<EOF > /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
EOF
setenforce 0

# 3、安装kubeadm、kubelet和kubectl
[root@Master ~]# yum install -y kubelet kubeadm kubectl

# 4、配置kubelet的cgroup
#编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 5、设置kubelet开机自启
[root@Master ~]# systemctl enable kubelet && systemctl start kubelet
2.2.5 准备集群镜像
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
[root@Master ~]# kubeadm config images list #自己看一下版本号,不然容易报错
k8s.gcr.io/kube-apiserver:v1.22.3
k8s.gcr.io/kube-controller-manager:v1.22.3
k8s.gcr.io/kube-scheduler:v1.22.3
k8s.gcr.io/kube-proxy:v1.22.3
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4


# 下载镜像
# 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案
images=(
	kube-apiserver:v1.22.3
	kube-controller-manager:v1.22.3
	kube-scheduler:v1.22.3
	kube-proxy:v1.17.4
	pause:3.5
	etcd:3.5.0-0
	coredns:v1.8.4
)

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

2.2.6 集群初始化

注:下面的操作只需要在master节点上执行即可

# 创建集群
[root@Master ~]# kubeadm init \
  --apiserver-advertise-address=192.168.30.100 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.22.3 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16
# 创建必要文件
[root@Master ~]# mkdir -p $HOME/.kube
[root@Master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@Master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

在这里插入图片描述
在这里插入图片描述

下面的操作只需要在node节点上执行即可

#根据自己的Master得到的命令,在Node1与Node2上操作
kubeadm join 192.168.30.100:6443 --token 9hv50z.0581s37z5q3bkibh \
        --discovery-token-ca-cert-hash sha256:7e8b5799c6e707392502146bccf82aadfa7e9901f939d4a34e1f966d5ba34a63

  • 在Master上查看信息,Node1,Node2成功进入集群

在这里插入图片描述

2.2.7 安装网络插件

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

#获取fannel的配置文件[root@master ~] # wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#使用配置文件启动fannel
[ root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#检查集群健康,发现报错
[root@Master ~]# kubectl get cs

在这里插入图片描述

出现这种情况,是/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口是0导致的,解决方式是注释掉对应的port即可,操作如下:

[root@Master ~]# cd /etc/kubernetes/manifests/
[root@Master manifests]# vim kube-controller-manager.yaml
[root@Master manifests]# vim kube-scheduler.yaml

  • kube-controller-manager.yaml文件修改:注释掉27行

在这里插入图片描述

  • kube-scheduler.yaml配置修改:注释掉19行,- --port=0

在这里插入图片描述

#Master上重启kubelet,检查集群健康
[root@Master ~]# systemctl restart kubelet.service
[root@Master ~]# kubectl get cs

在这里插入图片描述
在这里插入图片描述

NICE!

2.3 服务部署

2.3.1 目标
  • 在Kubernetes集群中部署一个Nginx程序,测试下集群是否正常工作。
2.3.2 部署操作
  1. 部署Nginx
[root@Master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine 

在这里插入图片描述

  1. 暴露端口
[root@Master ~]# kubectl expose deployment nginx --port=80 --type=NodePort

在这里插入图片描述

  1. 查看服务状态
[root@Master ~]# kubectl get pods,svc

在这里插入图片描述

  1. 在PC浏览器测试结果,尝试访问nginx服务
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值