使用kubeadm搭建k8s生产环境集群v1.23.1

2023-10-07 20:20

本文主要是介绍使用kubeadm搭建k8s生产环境集群v1.23.1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用kubeadm搭建k8s集群v1.23.1

  • 1、基本介绍
  • 2、初始化安装k8s集群的实验环境,每台机器都要操作
    • 2.1. 修改机器IP和DNS
    • 2.2. 配置主机hosts和机器名
    • 2.3. 配置主机之间无密码登录
    • 2.4. 关闭交换分区swap,提升性能
    • 2.5. 修改内核参数
    • 2.6. 关闭firewalld防火墙
    • 2.7. 关闭selinux
    • 2.8. 配置repo源
    • 2.9. 上传k8s组件离线包
    • 2.10. 配置时间同步
    • 2.11. 开启ipvs
    • 2.12. 安装iptables
  • 3、安装docker服务
    • 3.1.安装docker-ce
    • 3.2.配置docker镜像加速器和驱动和docker默认存储位置
  • 4、安装初始化k8s需要的软件包
  • 5、kubeadm初始化k8s集群
  • 6、扩容k8s集群-添加第一个工作节点
  • 7、安装kubernetes网络组件-Calico
  • 8、测试在k8s创建pod是否可以正常访问网络
  • 9、安装metrics-server组件
    • 9.1 部署metrics-server组件
    • 9.2 测试kubectl top命令
  • 10、安装StorageClass持久化存储
    • 10.1 搭建 nfs 服务
    • 10.2 在node1/node2测试nfs 服务,手动挂载试试
    • 10.3 安装 nfs provisioner
    • 10.4 创建 storageclass,动态供给 pv
  • 11、安装Kong
    • 11.1 访问konga
  • 12 安装Kuboard + 持久化存储


1、基本介绍

kubeadm和二进制安装k8s适用场景分析

kubeadm是官方提供的开源工具,是一个开源项目,用于快速搭建kubernetes集群,目前是比较方便和推荐使用的。kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群。Kubeadm初始化k8s,所有的组件都是以pod形式运行的,具备故障自恢复能力。
kubeadm是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,属于自动部署,简化部署操作,证书、组件资源清单文件都是自动创建的,自动部署屏蔽了很多细节,使得对各个模块感知很少,如果对k8s架构组件理解不深的话,遇到问题比较难排查。
kubeadm适合需要经常部署k8s,或者对自动化要求比较高的场景下使用。

二进制:在官网下载相关组件的二进制包,如果手动安装,对kubernetes理解也会更全面。
Kubeadm和二进制都适合生产环境,在生产环境运行都很稳定,具体如何选择,可以根据实际项目进行评估。


2、初始化安装k8s集群的实验环境,每台机器都要操作

实验环境

控制节点 192.168.1.128 master 2核4G
工作节点 192.168.1.129 node1 2核4G
工作节点 192.168.1.130 node2 2核4G

本文所需的安装包,下载

2.1. 修改机器IP和DNS

如果默认已配置,可忽略

vim /etc/sysconfig/network-scripts/ifcfg-ens33文件
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.1.128
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
  • 修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:
service network restart

2.2. 配置主机hosts和机器名

配置主机hosts文件,相互之间可通过主机名互相访问

修改每台机器的/etc/hosts文件,增加如下三行:
192.168.1.128 k8s-master
192.168.1.129 k8s-node1
192.168.1.130 k8s-node2在192.168.1.128上执行如下:
hostnamectl set-hostname k8s-master && bash 
在192.168.1.129上执行如下:
hostnamectl set-hostname k8s-node1 && bash
在192.168.1.130上执行如下:
hostnamectl set-hostname k8s-node2 && bash

2.3. 配置主机之间无密码登录

看情况配置,可以配置,也可不配置,无影响。这里不做介绍

2.4. 关闭交换分区swap,提升性能

  • 临时关闭
swapoff -a
  • 永久关闭:注释swap挂载,给swap这行开头加一下注释
vim /etc/fstab   
#/dev/mapper/centos-swap swap      swap    defaults        0 0
#如果是克隆的虚拟机,需要删除UUID

2.5. 修改内核参数

modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOFsysctl -p /etc/sysctl.d/k8s.conf

2.6. 关闭firewalld防火墙

systemctl stop firewalld ; systemctl disable firewalld

2.7. 关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  • 修改selinux配置文件之后,重启机器,selinux配置才能永久生效
[root@master ~]#getenforce
Disabled
  • 显示Disabled说明selinux已经关闭

2.8. 配置repo源

安装rzsz命令

yum install lrzsz -y

安装scp:

yum install openssh-clients

安装基础软件包

yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm

#配置epel源,默认已配置,一般不用动

2.9. 上传k8s组件离线包

上传至每台机器的/app/k8s/src

离线包下载

2.10. 配置时间同步

默认已配置,一般不用动

2.11. 开启ipvs

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1if [ 0 -eq 0 ]; then/sbin/modprobe ${kernel_module}fi
done
EOFchmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

2.12. 安装iptables

如果用firewalld不习惯,可以安装iptables :
#安装iptables

yum install iptables-services -y

#先禁用iptables,以后备用

service iptables stop   && systemctl disable iptables

#清空防火墙规则

iptables -F

3、安装docker服务

3.1.安装docker-ce

上传docker.tar.gz至/app/k8s/src

cd /app/k8s/src && tar -xf docker.tar.gz && cd /app/k8s/src/docker-20.10/
yum install -y *.rpm
systemctl start docker && systemctl enable docker.service

3.2.配置docker镜像加速器和驱动和docker默认存储位置

mkdir -p /data/docker
vim /etc/docker/daemon.json
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],"exec-opts": ["native.cgroupdriver=systemd"],"graph": "/data/docker"
} 

#修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。

systemctl daemon-reload  && systemctl restart docker
systemctl status docker

4、安装初始化k8s需要的软件包

cd /app/k8s/src
rpm -ivh *.rpm --force --nodeps
systemctl enable kubelet && systemctl start kubelet
systemctl status kubelet

#看到kubelet状态不是running状态,这个是正常的,不用管,等k8s组件起来这个kubelet就正常了。
注:每个软件包的作用
Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
kubelet: 安装在集群所有节点上,用于启动Pod的
kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

5、kubeadm初始化k8s集群

#上传初始化k8s集群需要的离线镜像包

docker pull harbor.com/pub-image/kube-apiserver:v1.23.1
docker pull harbor.com/pub-image/kube-proxy:v1.23.1
docker pull harbor.com/pub-image/kube-scheduler:v1.23.1
docker pull harbor.com/pub-image/kube-controller-manager:v1.23.1
docker pull harbor.com/pub-image/etcd:3.5.1-0
docker pull harbor.com/pub-image/coredns:v1.8.6
docker pull harbor.com/pub-image/pause:3.6

注:以上初始化步骤每台机器都要操作,离线镜像包请网上自行下载

注:以下步骤要区分master和node
#使用kubeadm初始化k8s集群

[root@master ~]# kubeadm init --kubernetes-version=1.23.1  --apiserver-advertise-address=192.168.1.128  --image-repository harbor.com/pub-image  --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification

显示如下,说明安装完成:
在这里插入图片描述
#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

[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
[root@master ~]# kubectl get nodes
NAME               STATUS    ROLES                  AGE   VERSION
cnsz92vl21370   NotReady   control-plane,master   2m47s   v1.23.1

此时集群状态还是NotReady状态,因为没有安装网络插件。

6、扩容k8s集群-添加第一个工作节点

在master1上查看加入节点的命令:

[root@master ~]# kubeadm token create --print-join-command

把node1/node2加入k8s集群:

[root@node1~]# kubeadm join 192.168.1.128:6443 --token 92k8q9.jojusveug21vkkhs \--discovery-token-ca-cert-hash sha256:443f2b57fef7c5606c4ee6576499d247f961b226b2329b1796bd3d949cc1c401

在这里插入图片描述
#看到上面说明node1节点已经加入到集群了,充当工作节点
#在master1上查看集群节点状况:

[root@master ~]# kubectl get nodes
NAME            STATUS     ROLES                  AGE     VERSION
cnsz92vl21369   NotReady   <none>                 19s     v1.23.1
cnsz92vl21370   NotReady   control-plane,master   8m30s   v1.23.1
cnsz92vl21371   NotReady   <none>                 31s     v1.23.1

#可以看到node的ROLES角色为空,就表示这个节点是工作节点。
#可以把node的ROLES变成work,按照如下方法:

kubectl label node cnsz92vl21371 node-role.kubernetes.io/worker=worker
kubectl label node cnsz92vl21369 node-role.kubernetes.io/worker=worker
NAME            STATUS     ROLES                  AGE     VERSION
cnsz92vl21369   NotReady   worker                 7m47s   v1.23.1
cnsz92vl21370   NotReady   control-plane,master   15m     v1.23.1
cnsz92vl21371   NotReady   worker                 7m59s   v1.23.1

注意:上面状态都是NotReady状态,说明没有安装网络插件

7、安装kubernetes网络组件-Calico

上传calico.yaml到master1上,使用yaml文件安装calico 网络插件 。
在线下载的配置文件注意修改镜像地址,离线包的calico.yaml地址已修改

[root@master ~]# kubectl apply -f  calico.yaml

注:在线下载配置文件地址是:https://docs.projectcalico.org/manifests/calico.yaml

再次查看集群状态。

[root@master ~]# kubectl get nodes
NAME            STATUS   ROLES                  AGE   VERSION
cnsz92vl21369   Ready    worker                 20m   v1.23.1
cnsz92vl21370   Ready    control-plane,master   28m   v1.23.1
cnsz92vl21371   Ready    worker                 20m   v1.23.1

[root@master ~]# kubectl get pods -n kube-system
在这里插入图片描述
#STATUS状态是Ready,说明k8s集群正常运行了

8、测试在k8s创建pod是否可以正常访问网络

[root@master1 ~]# kubectl run busybox --image busybox:latest --restart=Never --rm -it busybox -- sh
/ # ping baidu.com
PING baidu.com (100.65.188.7): 56 data bytes
64 bytes from 100.65.188.7: seq=0 ttl=55 time=1.554 ms

#通过上面可以看到能访问网络,说明calico网络插件已经被正常安装了

9、安装metrics-server组件

metrics-server是一个集群范围内的资源数据集和工具,同样的,metrics-server也只是显示数据,并不提供数据存储服务,主要关注的是资源度量API的实现,比如CPU、文件描述符、内存、请求延时等指标,metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等

9.1 部署metrics-server组件

注意:这个是k8s在1.17的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在不修改Kubernetes核心代码的同时扩展Kubernetes API。

[root@master~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml

增加如下内容:

- --enable-aggregator-routing=true

在这里插入图片描述
重新更新apiserver配置:

[root@mcnsz92vl21370 ~]# kubectl apply -f  /etc/kubernetes/manifests/kube-apiserver.yaml
[root@cnsz92vl21370 ~]# kubectl get pods -n kube-system

#把CrashLoopBackOff状态的pod删除

kubectl delete pods kube-apiserver -n kube-system
kubectl apply -f metrics.yaml kubectl get pods -n kube-system | grep metrics
metrics-server-788c55759d-kb2rx            1/1     Running   0              111m

9.2 测试kubectl top命令

[root@cnsz92vl21370 ~]# kubectl top nodes
NAME            CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
cnsz92vl21369   104m         5%     1624Mi          44%       
cnsz92vl21370   171m         8%     1646Mi          44%       
cnsz92vl21371   120m         6%     1563Mi          42%

10、安装StorageClass持久化存储

Kubernetes提供一种自动创建PV的机制,叫StorageClass,它的作用就是创建PV的模板。k8s 集群管理员通过创建storageclass可以动态生成一个存储卷pv供k8s pvc使用。storageclass 需要有一个供应者,用来确定我们使用什么样的存储来创建pv,常见的 provisioner 如下:
https://kubernetes.io/zh/docs/concepts/storage/storage-classes/

以NFS为例,要想使用 NFS,我们需要一个 nfs-client 的自动装载程序,称之为 provisioner

10.1 搭建 nfs 服务

[root@cnsz92vl21370 ~]# yum install nfs-utils -y
mkdir /data/volumes -pv 
vim /etc/exports
/data/volumes 100.76.74.11(rw,no_root_squash)
/data/volumes 100.76.74.7(rw,no_root_squash)
/data/volumes 100.76.74.6(rw,no_root_squash)
#no_root_squash: 用户具有根目录的完全管理访问权限 

#使 NFS 配置生效

[root@cnsz92vl21370 ~]# exportfs -arv 
service nfs start 
systemctl enable nfs 
systemctl status nfs

10.2 在node1/node2测试nfs 服务,手动挂载试试

mount 192.168.1.128:/data/volumes /media
df -h
192.168.1.128:/data/volumes     60G  6.3G   54G  11% /media

#nfs 可以被正常挂载
#手动卸载:
[root@node1 ~]# umount /media

10.3 安装 nfs provisioner

[root@cnsz92vl21370 ~]# kubectl apply -f nfs-deployment.yaml
[root@cnsz92vl21370 ~]#  kubectl get pods -n kube-system | grep nfs
nfs-provisioner-5859c55c9-g7stx            1/1     Running   1              11m

10.4 创建 storageclass,动态供给 pv

[root@cnsz92vl21370 ~]# cat nfs-storageclass.yaml  
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: nfs-storage
provisioner: example.com/nfs
[root@cnsz92vl21370 ~]# kubectl apply -f nfs-storageclass.yaml 
#查看 storageclass 是否创建成功 
[root@cnsz92vl21370 ~]# kubectl get storageclass 
NAME   PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE    
nfs-storage       example.com/nfs         Delete          Immediate          

#显示内容如上,说明 storageclass 创建成功了

11、安装Kong

注意:Konga前端页面需要做持久化存储,需要storageclass 创建成功了才能执行。

kubectl apply -f kong-ingress.yaml
kubectl apply -f konga.yaml
#查看 kong是否创建成功
kubectl get pods  -n kong

在这里插入图片描述
#查看 kong是否创建成功
kubectl get pvc -n kong
在这里插入图片描述

11.1 访问konga

浏览器打开:http://192.168.1.128/konga
在这里插入图片描述

12 安装Kuboard + 持久化存储

Kuboard,是一款免费的 Kubernetes 图形化管理工具。
官网地址:https://kuboard.cn/install/v3/install.html
官网yaml文件:https://kuboard.cn/install-script/kuboard.yaml

kubectl apply -f kuboard-v3-storage-class.yaml
kubectl get pods -n kuboard
kuboard-etcd-0              1/1     Running   0                 52m
kuboard-v3-5458d845-4qqf2   1/1     Running   0                 8m56s

#pod运行正常,打开web看看
浏览器打开:http://192.168.1.128/k8s
用户名和密码默认:admin/Kuboard123
根据提示添加集群,即可。
在这里插入图片描述

这篇关于使用kubeadm搭建k8s生产环境集群v1.23.1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160185

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推