Kubernetes集群部署与实践

news2024/12/24 21:04:37

一、提要

部署Kubernetes集群至少需要3台服务器,其中至少要有1个服务器做master节点,至少要有1个服务器做node节点,且节点名称是唯一的。

当集群中只有一个master节点时,如果其出现了故障,会导致Kubernetes的控制平面完全失效。如要保证Kubernetes集群的高可靠性,可以设置多个master,当其中部分master出现故障时,其他master还可以管理整个集群。

因此,我们这里使用三台服务器部署,可以有2种部署方案,2个master+1个node,或者1个master+2个node,这里我们使用后一种方式。

三台服务器:

master,192.168.153.145
node1,192.168.153.146
node2,192.168.153.147

二、部署

修改主机名

# master机器执行命令
hostnamectl set-hostname master

# node1机器执行命令
hostnamectl set-hostname node1

# node2机器执行命令
hostnamectl set-hostname node2

关闭防火墙:

# 3台机器都执行
systemctl stop firewalld
systemctl disable firewalld

关闭selinux:

# 3台机器都执行
sed -i 's/enforcing/disabled/' /etc/selinux/config

关闭swap分区:

# 3台机器都执行
vim /etc/fstab
注释掉该行:/dev/mapper/centos-swap

编辑/etc/hosts文件,新增以下内容:

# 3台机器都执行
192.168.153.145 master master
192.168.153.146 node1 node1
192.168.153.147 node2 node2

创建并编辑/etc/sysctl.d/k8s.conf,新增以下内容:

# 主要是为了将桥接的IPv4流量传递到iptables
# 只在master机器上执行
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

执行命令:

# 只在master机器上执行
sysctl --system

配置时间同步:

# 3台机器都执行
yum -y install chrony

编辑/etc/chrony.conf文件,新增以下内容:

# 3台机器都执行
pool time1.aliyun.com iburst

执行命令:

# 3台机器都执行
systemctl enable --now chronyd

免密认证:

# 只在master机器上执行
ssh-keygen -t rsa
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2

重启机器:

# 3台机器都执行
reboot

安装docker:

# 3台机器都执行
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker
systemctl enable docker
docker -v

创建并编辑/etc/yum.repos.d/kubernetes.repo,新增以下内容:

# 主要是为了添加Kubernetes的源
# 3台机器都执行
[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:
注:1.24以上版本已经放弃docker,如果安装,k8s在初始化时会报错

# 3台机器都执行
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet

执行命令:

# 只在master机器上执行
docker pull coredns/coredns:1.8.5
docker tag coredns/coredns:1.8.5 registry.aliyuncs.com/google_containers/coredns:v1.8.5

创建并编辑/etc/docker/daemon.json,新增以下内容:

# 3台机器都执行
{
    "exec-opts": ["native.cgroupdriver=systemd"]
}

执行命令:

# 3台机器都执行
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

部署Kubernetes master节点:

# 只在master机器上执行
kubeadm init  \
--apiserver-advertise-address=192.168.153.145 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

如有问题通过百度解决,漫长等待后,记录下以下值:

kubeadm join 192.168.153.145:6443 --token zqlnxn.b8110o37bp5kwinl \
        --discovery-token-ca-cert-hash sha256:69cf2bd1bf87495d1e2e5dc11b3736151feaf00e38a59ea66b276007a163a0aa

如下图所示:

在这里插入图片描述

执行命令:

# 只在master机器上执行
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' > /etc/profile.d/k8s.sh
source /etc/profile.d/k8s.sh

安装Pod网络插件:

# 只在master机器上执行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 或者下载下来之后手动安装
kubectl apply -f /root/kube-flannel.yml

加入Kubernetes的Node节点:

# 在两个node机器上执行
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
kubeadm join 192.168.153.145:6443 --token zqlnxn.b8110o37bp5kwinl --discovery-token-ca-cert-hash sha256:69cf2bd1bf87495d1e2e5dc11b3736151feaf00e38a59ea66b276007a163a0aa 

查看节点状态,如下图所示:

在这里插入图片描述

至此,如果解决完所有报错,则部署结束。

三、测试Kubernetes集群

执行命令:

# 只在master机器上执行
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

如图所示:

在这里插入图片描述

浏览器访问:

在这里插入图片描述

四、Kubernetes实践

以下只在master机器上执行

4.1、Deployment资源部署

集群上运行Nginx镜像:

kubectl run nginx --image=nginx

查看部署的Nginx应用:

kubectl get deployments.apps nginx

查看Nginx部署的详细信息及过程:

kubectl describe deploy nginx

查看Nginx的ReplicaSet资源:

# DESIRED-副本数期望值,CURRENT-当前副本数,READY-就绪状态的副本数,AGE-已启动时间
kubectl get rs

查看Nginx的Pod资源:

kubectl get pod -o wide

4.2、Deployment日志查看

查看Nginx的应用日志:

kubectl logs nginx-85b98978db-kxvn6

在这里插入图片描述

4.3、Deployment资源执行

通过kubectl进入Nginx应用对应的容器:

kubectl exec -it nginx-85b98978db-kxvn6 bash

查看Service和Pod的映射关系:

kubectl get endpoints

4.4、Deployment资源扩展

扩展Nginx应用的副本数为3(原来是1):

kubectl scale deployment nginx --replicas=3

扩展后查看Nginx应用的Deployment、ReplicaSet、Pod、Endpoints资源:

kubectl get deployment.apps nginx
kubectl get rs
kubectl get pod
kubectl get ep

在这里插入图片描述

4.5、资源删除

删除对应的Deployment资源(通过kubectl run启动的):

kubectl rollout undo deploy nginx

检验删除结果:

kubectl get pod

删除对应的Service资源(通过kubectl apply启动的):

kubectl delete -f /tmp/nginx.svc.yml

4.6、故障排查

查看Nginx的应用日志:

kubectl logs nginx-85b98978db-kxvn6

输出资源的详细信息:

kubectl describe pod nginx-85b98978db-kxvn6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

规则引擎-drools-5-决策表

文章目录Excel格式决策表 官网地址决策表使用方式Excel组成部分与drl规则文件对应关系Excel文件内容示例drl规则文件内容Excel决策表内容说明1. RuleSet2. RuleTable3. Attributes示例Excel转化drl代码及结果执行drl代码及结果Excel格式决策表 官网地址 决策表这部分内容在官网…

几种IO模型

IO真正的IO操作涉及到和IO设备的交互,而操作系统限制了应用程序直接和设备交互。我们通常说的IO操作实际上是应用程序和操作系统进行交互,一般会使用操作系统的System Call,即系统调用,读是read(),写是write()&#xf…

设计模式-结构型模式

目录 5.结构型模式 5.1 代理模式 5.1.1 概述 5.1.2 结构 5.1.3 静态代理 5.1.4 JDK动态代理 5.1.5 CGLIB动态代理 5.1.6 三种代理的对比 5.1.7 优缺点 5.1.8 使用场景 5.2 适配器模式 5.2.1 概述 5.2.2 结构 5.2.3 类适配器模式 5.2.4 对象适配器模式 5.2.5 应…

聊聊关于矩阵反向传播的梯度计算

目录 1. 前向传播 2. 反向传播 3. 矩阵反向传播 4. 总结 1. 前向传播 建立如图所示的简单网络 W 是权重矩阵,初始赋值为 2*2 的矩阵 X 是输入特征,初始赋值为 2*1 的矩阵 这样通过矩阵乘法 , Y WX ,应该得到一个 2*1 的输…

在这竞争激烈的时代,如何才能够在激烈竞争中脱颖而出呢

不管是在职场想要获得认可得到晋升,还是与客户谈合作;都需要你能够脱颖而出。让他人能够看到你并且认可你。那如何才能脱颖而出呢?首先你要先认识自己,知道自己有什么优势、劣势、技能、兴趣、爱好等等。明确自己有什么价值&#…

软件工程(1)--初识基础概念

前言 学习了半年的软件工程课程,总不能一无所获吧,故此写下文章总结一番。 软件工程是一门综合性交叉学科,它涉及计算机科学、工程科学、管理科学和数学等领域。学习目标是掌握需求分析、软件设计、编码风格、软件测试的工程化方法。 软件程序…

什么是股票量化研究?

谈到股票量化研究领域,肯定少不了有自动交易系统的支撑,像平时能将股票池中的数据挖掘出来也能熟能生巧的进行自助量化研究,包括数据接口系统的开发使用都是受到量化的影响,那么,如何看待股票量化研究?像平…

arm版(以uos为例)linux安装mysql8

官网下载:https://downloads.mysql.com/archives/community/上传到服务器,然后解压缩tar -zxvf mysql-8.0.31-linux-glibc2.17-aarch64.tar.gzmv mysql-8.0.31-linux-glibc2.17-aarch64 /usr/local/mysql-8创建MySQL数据目录mkdir -p /datacd datamkdir …

打通对账的最后一公里——对账管理平台

背景 日新月异的科技与快速变化的消费需求不断驱动零售模式的变革,实体商业与数字经济、传统零售与新零售,逐渐融合并形成了全渠道、一体化的发展趋势,也改变了以往企业认知中线上、线下渠道割裂的思维定式,零售快消类企业纷纷建…

电子技术——MOS管的物理特性

电子技术——MOS管的物理特性 增强型 MOSFET 是应用最广泛的场效应晶体管。除了最后一节,我们整章讨论的都是增强型 MOSFET 。我们从它的物理元件结构和物理操作入手,在下一节我们会在本节的基础上学习 MOSFET 的电流-电压特性。 元件结构 上图展示了n-…

Day876.redolog刷盘问题 -MySQL实战

redolog刷盘问题 Hi,我是阿昌,今天学习记录的是关于redolog刷盘问题的内容。 平时的工作中,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很…

RPA自动化办公07——Uibot流程加入python插件

参考:扩展UiBot命令_UiBot开发者指南 Uibot是非常方便,但是有些功能可能还需要别的语言来完成,例如python语言,作为胶水语言,在一个Uibot里面插入python脚本是很方便,好用的。 加入插件的位置 在新建一个流…

Seata分布式事务模式(TA、TCC、XA、SAGA)工作机制

前言 分布式应用痛点 分布式应用有一个比较明显的问题就是,一个业务流程通常需要几个服务来完成,业务的一致性很难保证。为了保障业务一致性,每一步都要在 catch 里去处理前面所有的“回滚”操作,可读性及维护性差,开…

分布式微服务

目录 认识微服务 单体服务架构的特点 分布式架构的特点 微服务 SpringCloud 总结 服务拆分及远程调用 服务拆分原则 假如在订单服务中,需要一起返回用户的信息 Eureka注册中心 Eureka的结构和作用 问题:order-service如何得知user-service实例…

基于拓扑的单树分割用于地面激光扫描点云的自动处理

Paper题目:Topology-based individual tree segmentation for automated processing of terrestrial laser scanning point clouds ABSTRACT 地面激光扫描 (TLS) 是一种基于地面的方法,可通过光探测和测距 (LiDAR) 技术快速获取 3D 点云。从 TLS 点云量…

搜索引擎关键字智能提示实践

为了提高阅读体验,请移步到:搜索引擎关键字智能提升实践一、背景搜索关键字智能提示是一个搜索应用的标配,主要作用是避免用户输入错误的搜索词,并将用户引导到相应的关键词上,以提升用户使用体验。雪球以连接人与资产…

【K8S之调度器流程和扩展】如何给 scheduler 添加扩展插件、关闭默认插件、创建多个 scheduler?

参考 自定义 Kubernetes 调度器 阳明https://github.com/cnych/sample-scheduler-extender kube-scheduler 源码位置 kubernetes 调度器的源码位于 kubernetes/pkg/scheduler 中,大体的代码目录结构如下所示:(不同的版本目录结构可能不太一样) kuber…

如何检测文章被搜索引擎收录(如何让搜索引擎收录网站)

如何写网站内容才利于搜索引擎收录 网站关键词要想有好的排名,网站本身必须是被搜索引擎收录的状态,另外,网站上的相关内容收录越多,搜索引擎给与网站关键词的排名靠前概率会越大,那么,网站内容怎样来写会…

[Linux]生产者消费者模型(基于BlockQueue的生产者消费者模型 | 基于环形队列的生产者消费者模型 | 信号量 )

文章目录生产者消费者模型函数调用角度理解生产者消费者模型生活角度理解生产者消费者模型为什么要使用生产者消费者模型生产者消费者模型优点321原则基于BlockingQueue的生产者消费者模型POSIX信号量回顾信号量概念信号量操作函数环形队列基于环形队列的生产者消费者模型生产者…

Android Studio如何打jar包和aar包并使用

Android Studio如何打jar包和使用生成jar包方式module方式生成jar方式第一类修改主app的方式第二类:通过新建module方式生成jar包如何使用jar包aar生成并使用aar生成aar使用之前有篇文章介绍了so库的生成和使用,看这里,但是,如果我…