【K8s】Kubernetes入门-02

环境规划

集群类型

Kubernetes集群大体上分为两类:

  • 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境

  • 多主多从:多台Master节点和多台Node节点,搭建复杂,安全性高,适合用于生产环境
    在这里插入图片描述

安装方式

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

  • minikube:一个用于快速搭建单节点kubernetes的工具
  • kubeadm:一个用于快速搭建kubernetes集群的工具
  • 二进制包:从官网下载每个组件的二进制包,依次安装,有助于理解kubernetes组件

说明:演示选择使用kubeadm方式安装集群环境

主机规划

主机IP操作体统配置
master192.168.2.94CentOS7.64U8G 50G
node1192.168.2.95CentOS7.64U8G 50G
node2192.168.2.96CentOS7.64U8G 50G

环境搭建

本次环境需要安装三台CentOS服务器(一主二从),然后在每台服务器分别安装Docker、Kubeadm、Kubelet、Kubectl

主机安装

安装三台服务器

image-20220807231215279

环境配置

检查系统版本
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 

此方式安装Kubernetes集群要求CentOS版本在7.5以上

hosts配置

配置主机名解析,有DNS也可以直接配置DNS,方便后面集群节点之间的调用

cat <<EOF>>/etc/hosts
192.168.2.94 master
192.168.2.95 node1
192.168.2.96 node2
EOF
时间同步配置

集群中节点的时间必须精确一致

使用 chronyd

yum install -y chrony
timedatectl set-timezone Asia/Shanghai
## 启动
systemctl start chronyd
## 启用
systemctl enable chronyd
## 停止
systemctl stop chronyd
## 禁用
systemctl disable chronyd

使用 ntp

yum install -y ntp
cat <<EOF>>/var/spool/cron/root
00 12 * * * /usr/sbin/ntpdate -u ntp1.aliyun.com && /usr/sbin/hwclock -w
EOF
##查看计划任务
crontab -l
##手动执行
/usr/sbin/ntpdate -u ntp1.aliyun.com && /usr/sbin/hwclock -w

image-20220807232320564

禁用iptable和firewalld服务

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

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

关闭iptables服务

[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables
selinux 配置

selinuxlinux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

需要重启生效

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 临时关闭
setenforce 0 
getenforce

image-20220808141956564

禁用swap分区

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响

Kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vi /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap

sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

image-20220808141929110

修改linux的内核参数
# 修改linux的内核采纳数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
vi /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

image-20220808141603448

配置ipvs功能

在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs

两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y
# 2.添加需要加载的模块写入脚本文件
[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
EOF
# 3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

image-20220808141545255

重启服务器
reboot

检查

[root@master ~]# getenforce
Disabled
[root@master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7821         149        7478           8         192        7422
Swap:             0           0           0

安装Docker

curl -sSL https://get.daocloud.io/docker | sh

mkdir /etc/docker

cat <<EOF> /etc/docker/daemon.json
{
	"exec-opts": ["native.cgroupdriver=systemd"],
	"registry-mirrors": ["https://evcbq79g.mirror.aliyuncs.com"]
}
EOF

# 启用docker
sudo systemctl start docker
sudo systemctl enable docker

# 查看版本
docker version

image-20220808144501504

为什么要修改docker的cgroup driver

修改Docker的Cgroup Driver为systemd,替换默认的cgroupfs

安装Kubernetes组件

添加源
vi /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
			http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安装kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

 yum install -y kubeadm kubelet kubectl 
配置kubelet的cgroup
cat <<EOF> /etc/sysconfig/kubelet
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF
设置kubelet开机自启
systemctl start kubelet
systemctl enable kubelet

image-20220808145907841

[root@node1 ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

准备集群镜像

查看镜像

在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看

[root@master ~]# kubeadm config images list

image-20220808153955718

下载镜像

国内无法拉取上述镜像,可以通过aliyun代理拉取,也可以直接执行下面语句

我先在香港服务器上拉取然后推送的Docker Hub

images=(
	 kube-apiserver:v1.17.17
     kube-controller-manager:v1.17.17
     kube-scheduler:v1.17.17
     kube-proxy:v1.17.17
     pause:3.1
     etcd:3.4.3-0
     coredns:1.6.5
)

# pull
for imageName in ${images[@]};do
	docker pull jontymax/$imageName
	docker tag jontymax/$imageName k8s.gcr.io/$imageName
	docker rmi jontymax/$imageName 
done

集群初始化

对集群进行初始化,并将node节点加入到集群中

master节点执行

创建集群
 kubeadm init \
    --image-repository registry.aliyuncs.com/google_containers \
	--apiserver-advertise-address=192.168.2.94 \
	--kubernetes-version=v1.17.4 \
	--service-cidr=10.96.0.0/12 \
	--pod-network-cidr=10.244.0.0/16 
重置集群
kubeadm reset -f
创建文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

image-20220809102933345

加入集群
kubeadm join 192.168.2.94:6443 --token dl0jdc.tby7pc1yd2q37wws \
    --discovery-token-ca-cert-hash sha256:0210b33b1b18e09cd32e0c6b3a1afa7f5a1e2f8c93f9fa5ccf156a9245fa51d6

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NPi5dNnV-1660319434467)(https://cdn.jonty.top/img/image-20220809103525615.png)]

查看节点
kubectl get nodes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I8Uu94GR-1660319434468)(https://cdn.jonty.top/img/image-20220809103828566.png)]

安装网络插件

Kubernetes支持多种网络插件,比如flannel、calico、canal等

只需要在master节点执行即可,插件使用的是DaemonSet的控制器,会在每个节点运行

下载配置文件

获取配置文件,根目录即可/root/

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kube-flannel.yml

启动flannel
kubectl apply -f kube-flannel.yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AwyIHtil-1660319434468)(https://cdn.jonty.top/img/image-20220809134455940.png)]

查看节点状态

稍等片刻,集群node节点Ready

kubectl get nodes

至此,Kubernetes集群环境搭建完成

image-20220809133903974

服务部署

在K8s集群中部署Nginx服务,测试集群是否正常

master节点执行

Nginx服务

创建服务
kubectl create deployment nginx  --image=nginx:1.14-alpine
暴露端口
kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort
查看服务
kubectl get pod
kubectl get service

image-20220809135611076

访问服务

使用任意node IP 加端口访问

192.168.2.94:32148

image-20220809135533022

参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JontyWang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值