Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

本文主要是介绍Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kubernetes - CentOS7搭建k8s集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

在这里插入图片描述

前言概述:

一、Kubernetes—k8s是什么

Kubernetes 这个名字源于希腊语,意为“舵手“或”飞行员"。
Kubernetes,简称K8s,中间有8个字符用8代替缩写。
Google于2014年开源项目,为容器化应用提供集群和管理的开源工具,Kubernetes目标是让部署容器化的应用简单并且高效,提供了应用部署,规划,更新,维护的一种机制。

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

主要特性:
1、高可用,不宕机,自动灾难恢复
2、灰度更新,不影响业务正常运转
3、一键回滚到历史版本
4、方便的伸缩扩展(应用伸缩,机器加减)、提供负载均衡有一个完善的生态

二、kubernetes 功能和架构

2.1 K8s 概述 :
Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes 能够进行应用的自动化部署和扩缩容。在Kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes积累了作为Google 生产环境运行工作负载 15年的经验,并吸收了来自于社区的最佳想法和实践。
2.2 K8s 功能:
1)自动装箱 —基于容器对应用运行环境的资源配置要求自动部署应用容器
2)自我修复(自愈能力) —当容器失败时,会对容器进行重启,当所部署的Node 节点有问题时,会对容器进行重新部署和重新调度当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
3)水平扩展 —通过简单的命令、用户 UI界面或基于CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
4)服务发现 —用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡
5)滚动更新 —可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
6)版本回退 —可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
7)密钥和配置管理 —在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署
8)存储编排 —自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
9)批处理 —提供一次性任务,定时任务;满足批量数据处理和分析的场景

三、kubernetes 集群搭建(kubeadm/二进制包部署方式)

此次我们以kubeadm部署方式演示验证

3.1 前置知识点
目前生产部署 Kubernetes 集群主要有两种方式:
1) kubeadm Kubeadm是一个K8s部署工具,提供kubeadm
init 和kubeadm join,用于快速部署Kubernetes 集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
2)二进制包 从Github下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。 Kubeadm
降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署 Kubernetes
集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

3.2 kubeadm 部署方式介绍 kubeadm 是官方社区推出的一个用于快速部署kubernetes
集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:
1)创建一个 Master 节点 kubeadm init
2)将 Node 节点加入到当前集群中 $ kubeadm join <Master节点的IP和端口>

四、安装要求

在配置Kubernetes集群节点之前,需要满足以下几个条件:
4.1 操作系统:支持Linux操作系统,推荐使用Ubuntu、CentOS等常见发行版;
4.2 主机数量:至少需要3台主机,建议一台用于Master节点,两台用于Worker节点;
4.3 硬件配置:至少2个CPU、2GB内存,硬盘30GB;
4.4 网络通信:集群中所有机器之间网络互通;
4.5 网络通信:可以访问外网,需要拉取镜像(需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点);
4.6 禁止SWAP分区 (kubernetes的想法是将实例紧密包装到尽可能接近100%。 所有的部署应该与CPU /内存限制固定在一起。 所以如果调度程序发送一个pod到一台机器,它不应该使用交换。设计者不想交换,因为它会减慢速度,所以关闭swap主要是为了性能考虑)。

五、最终目标/提纲

5.1 在所有节点上安装 Docker 和 kubeadm
5.2 部署 Kubernetes Master
5.3 部署容器网络插件
5.4 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
5.5 部署 Dashboard Web 页面,可视化查看 Kubernetes 资源

六、学习课程前提

6.1 熟悉 Docker 的基本使用
6.2 熟悉 Linux 操作系统

相关环境:

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

实测步骤:

1、搭建三台虚拟机并安装操作系统CentOS_7.9
2、三台系统进行初始化操作环境
3、在三台节点安装docker kubelet kubeadm kubectl
4、在Master节点安装kubeadm init命令进行初始化
5、在Node节点执行kubeadm join命令将node节点添加到集群
6、在Master节点安装CNI配置插件,如flannel等
7、测试kubernetes集群,如nginx

开始搬砖:

一、系统初始化(ALL节点)

# 替换国内源配置
ls /etc/yum.repos.d/
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak  # 备份当前源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 阿里云 CentOS 7源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo # 网易163 CentOS 7源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-7.repo # 华为云CentOS 7源# 清空缓存
yum clean all
# 生成缓存
yum makecache
# 安装前最好更新一下系统软件
yum -y install vim
yum -y install unzip
yum -y install lrzsz
yum -y update 
# IP配置
ip address
vi /etc/sysconfig/network-scripts/ifcfg-ens192
systemctl restart network# 主机名配置
Hostname
hostnamectl set-hostname k8s-master  # 192.168.10.160
hostnamectl set-hostname k8s-node01  # 192.168.10.161
hostnamectl set-hostname k8s-node02  # 192.168.10.162
# 防火墙配置
systemctl stop firewalld     # 关闭
systemctl disable firewalld  # 禁用
firewall-cmd --reload        # 重启防火墙,生效配置# SELinux安全机制配置
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时关闭
# 关闭SWAP
swapoff -a # 临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久 (需重启)
# 设置host映射和主机名
vim /etc/hosts或脚本
cat >> /etc/hosts << EOF 
192.168.10.160  k8s-master
192.168.10.161  k8s-node01
192.168.10.162  k8s-node02
EOF

在这里插入图片描述

# 将桥接的 IPv4 流量传递到 iptables 的链(内核参数修改---在所有主机上将桥接的ipv4流量传递到iptables的链将桥接的IPv4流量传递到iptables的链(有一些ipv4的流量不能走iptables链,因为linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失),配置kubernetes.conf文件(kubernetes.conf文件原来不存在,需要自己创建的)
vim /etc/sysctl.d/k8s.conf
-------------------------------------------
或脚本 
cat > /etc/sysctl.d/k8s.conf << EOF 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1 
EOF
sysctl -p   # 生效

在这里插入图片描述

# 同步NTP时间
yum install -y ntpdate    # 安装NTP
ntpdate time.windows.com  # 同步NTP服务器系统网络时间
# 统一重启
reboot

二、安装Docker/kubeadm/kubelet (ALL节点)

2.1 安装Docker

Dockershim中间件会一直保留到2021年末,直到发布Kubernetes1.23版本为止。2022年k8s的1.24版本正式剔除dockershim,不再支持让docker去调用containerd,而是直接操作containerd,先安装containerd来替换CRI接口调用。
本次验证v1.18.0版本,后续再验证最新v1.28.0版本。 Kubernetes 1.18.0版本默认 CRI(容器运行时)为Docker,因此先安装Docker,可参考之前部署手册

# 安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm2# 安装 Docker 
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 
# 查看仓库中所有的docker版本
yum list docker-ce --showduplicates | sort -r# 不指定版本号即默认安装
yum install -y docker-ce
# 如果要指定版本号安装
yum install docker-ce-18.06* -y ,此时指定的就是docker-ce-18.06.1的版本
yum install -y docker-ce-18.06.1.ce-3.el7 

在这里插入图片描述

# 启动docker并设置docker开机自启服务
systemctl start docker
systemctl enable docker# 测试验证docker是否安装成功
docker version# 永远的HelloWorld
docker run hello-world

在这里插入图片描述

# 镜像加速配置
1、URL:目前我这边测试环境使用阿里云容器镜像服务:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2、注册账户:当然还有腾讯网易等都可以使用不指定,注册一个属于自己的阿里云账户
3、登入获取加速器地址及脚本:登陆阿里云开发者平台--点击控制台---选择容器镜像服务---获取加速器地址---粘贴脚本直接执行
4、重启服务器mkdir -p /etc/docker
vim /etc/docker/daemon.json
或脚本
cat > /etc/docker/daemon.json << EOF 
{ 
"registry-mirrors": ["https://k******f.mirror.aliyuncs.com"] 
} 
EOF

在这里插入图片描述

# 重启服务
systemctl restart docker
# 查看生效信息
docker info
2.2 安装kubeadm、kubelet、kubectl

kubeadm和kubectl都是工具,kubelet才是系统服务
安装包说明:
kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
kubeadm 用于初始化集群,启动集群的命令工具
kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

# 配置k8s镜像源
# 添加 yum 源 
vim /etc/yum.repos.d/kubernetes.repo
或脚本
cat > /etc/yum.repos.d/kubernetes.repo << EOF 
[kubernetes]
name=Kubernetes Repo
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64   
gpgcheck=0
enabled=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpgphttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF

在这里插入图片描述

# 查询kubeadm可用的版本
yum list kubeadm --showduplicates# 安装kubeadm、kubelet、kubect,# 此次测试验证v1.24之前版本,最新v1.28.2
yum  install -y kubeadm-1.18.0 kubelet-1.18.0 kubectl-1.18.0# 设置kubelet开机自启(先不用启动,会报错,后面kubeadm init初始化master时会自动拉起kubelet)
systemctl enable kubelet

在这里插入图片描述

四、集群初始化Kubernetes Master

在Master节点安装kubeadm init命令进行初始化

4.1 k8s-master节点初始化 (在192.168.10.160 k8s-master节点操作)
# 集群初始化
kubeadm init --apiserver-advertise-address=192.168.10.160 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
或脚本(去掉##注释,脚本 \ 后面不能有空格)
kubeadm init \											        #在master节点执行初始化(node节点不用执行)
--apiserver-advertise-address=192.168.10.160 \			        #指定apiserver的IP,即master节点的IP,指定master的interface
--image-repository registry.aliyuncs.com/google_containers \	#设置镜像仓库为国内的阿里云镜像仓库
--kubernetes-version v1.18.0 \								    #设置k8s的版本,跟步骤三的kubeadm版本一致
--service-cidr=10.96.0.0/12 \									#设置node节点的网络
--pod-network-cidr=10.244.0.0/16							    #指定Pod服务的虚拟IP地址范围,设置node节点的网络
#--------------------------------------#
# 记录kubeadm join的输出,后面需要这个命令将各个节点加入集群中

在这里插入图片描述

输出 Your Kubernetes control-plane has initialized successfully!
表示master节点安装成功。

#如果失败可以重置,注意版本。如安装成功后直接跳到下一步。
kubeadm reset
rm -rf $HOME/.kube/config​
# 根据提示执行,使用 kubectl 工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看集群节点
kubectl get nodes

在这里插入图片描述

五、将Node节点全部加入到集群

在Node节点执行kubeadm join命令将node节点添加到集群
在这里插入图片描述

在k8s-node01/node02节点操作,把node节点加入集群
# 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令
kubeadm join 192.168.10.160:6443 --token ntpc3i.81ga63fqtkprsrx8 \--discovery-token-ca-cert-hash sha256:399fced327c9274c660325648300b822aa3714f42b466f0edbba2cb32b754ae8 

在这里插入图片描述

选择语言默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作命令如下:
kubeadm token create --print-join-command
# 在master节点上,再次查看集群节点,输出如下信息表示node节点加入集群成功
kubectl get nodes

在这里插入图片描述

状态为NotReady未准备就绪是因为需要部署网络插件才能生效。

六、部署Pod(CNI)网络插件

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

在这里插入图片描述

# 默认镜像地址无法访问,sed命令修改为dockerhub镜像仓库:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 运行所有插件
kubectl get pods -n kube-system
-----------------------------------------------------------------------
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-ctd28             1/1     Running   0          6d17h
coredns-7ff77c879f-xpbd9             1/1     Running   0          6d17h
etcd-k8s-master                      1/1     Running   0          6d17h
kube-apiserver-k8s-master            1/1     Running   0          6d17h
kube-controller-manager-k8s-master   1/1     Running   0          6d17h
kube-proxy-6chlp                     1/1     Running   0          6d17h
kube-proxy-7rfbc                     1/1     Running   0          6d17h
kube-proxy-mzmsg                     1/1     Running   0          6d17h
kube-scheduler-k8s-master            1/1     Running   0          6d17h

在这里插入图片描述

# 启动所有插件后,再观察集群活动状态为Ready,准备就绪了
kubectl get nodes

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

七、测试验证kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行

# 拉取nginx镜像
kubectl create deployment nginx --image=nginx
# 开通80端口对外
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看运行状态
kubectl get pod,svc
-----------------------------------------------------------------------
NAME                        READY   STATUS    RESTARTS   AGE
pod/nginx-f89759699-zgrqt   1/1     Running   0          2m44sNAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        6d17h
service/nginx        NodePort    10.104.45.57   <none>        80:30400/TCP   9s

在这里插入图片描述

# 测试访问地址:http://NodeIP:Port
http://192.168.10.160:30400/
http://192.168.10.161:30400/
http://192.168.10.162:30400/

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

以上,感谢!

这篇关于Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

服务器集群同步时间手记

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

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

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

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

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