小白到运维工程师自学之路 第七十集 (Kubernetes集群部署)

news2024/9/22 23:27:17

一、概述

Kubernetes(简称K8S)是一个开源的容器编排和管理平台,是由Google发起并捐赠给Cloud Native Computing Foundation(CNCF)管理的项目。它的目标是简化容器化应用的部署、扩展、管理和自动化操作。

以下是Kubernetes的一些关键特性:

1、容器编排:Kubernetes可以管理和调度大规模的容器化应用程序。它能够确保应用程序在集群中的各个节点上正确启动和运行,并根据资源需求和可用性动态调整容器的数量和位置。

2、服务发现和负载均衡:Kubernetes提供了内建的服务发现机制,使得容器之间可以通过服务名来相互通信,而不需要硬编码IP地址或端口。同时,Kubernetes还支持负载均衡,自动将请求分发给可用的容器实例。

3、自动伸缩:Kubernetes能够根据应用程序的负载自动进行水平扩展,即增加或减少容器的数量,以满足应用程序的需求。这种自动伸缩可以基于CPU利用率、内存使用量等指标进行配置。

4、自愈性和故障恢复:Kubernetes具有自动故障检测和修复的能力。当容器或节点发生故障时,Kubernetes会自动重新启动容器、迁移容器到其他健康节点,或者按照指定的策略自动替换故障的节点。

5、云原生底层设施支持:Kubernetes与云原生应用开发和部署的理念紧密结合。它提供了对云平台的适配和整合,能够无缝地部署和管理应用程序到各种云服务提供商的基础设施上。

6、插件和扩展性:Kubernetes拥有丰富的插件和扩展机制,可以通过自定义资源或控制器来扩展和定制其功能。这使得开发者可以根据自己的需求,将Kubernetes与其他工具和平台进行整合。

Kubernetes广泛应用于企业和云服务提供商中,为容器化应用提供了灵活、可靠和可扩展的运行环境。它极大地简化了应用程序的部署和管理,提高了开发和运维的效率,成为云原生应用开发的重要基石之一。

二、工作原理

Kubernetes的工作原理可以分为以下几个关键组件和概念:

1. Master节点:Master节点是Kubernetes集群的控制中心,负责整个集群的管理和控制。它包含以下组件:
   - API Server:提供集群的API接口,接收和处理用户和组件的请求。
   - Scheduler:根据用户的需求和资源的可用性,决定将容器调度到集群中的哪个节点上。
   - Controller Manager:负责监控和管理集群状态,包括自动伸缩、故障恢复等功能。
   - etcd:保存集群的配置信息和状态数据,保证高可用和一致性。

2. Worker节点:Worker节点是集群中实际运行容器的节点,也称为Minion节点。每个Worker节点上都有以下组件:
   - Kubelet:负责与Master节点通信,管理本节点上的容器和Pod。
   - Container Runtime:用于运行容器的底层软件,如Docker。
   - kube-proxy:负责网络代理和负载均衡,为容器提供网络服务。

3. Pod:Pod是Kubernetes的最小部署单元,可以包含一个或多个相关的容器。Pod是运行在Worker节点上的实际应用实例,它共享相同的网络和存储资源。每个Pod都有一个唯一的IP地址。

4. ReplicaSet和Deployment:ReplicaSet是Kubernetes中的一个控制器,用于创建和管理拥有相同配置和副本数量的Pod组。它确保指定数量的Pod运行,并在有需要时进行水平扩展或收缩。Deployment是对ReplicaSet的进一步封装,提供了应用程序的版本控制和滚动升级的能力。

5. Service:Service是通过标签选择器与一组Pod进行关联,并提供稳定的服务访问入口。Service可以实现负载均衡、内部服务发现和跨集群通信等功能。

Kubernetes的工作原理可以简要概括为:用户通过API Server与Master节点交互,创建、修改或删除资源对象(如Pod、ReplicaSet、Deployment等)。Master节点根据请求的内容进行相应操作,并将相应配置信息存储在etcd中。Kubelet监听Master节点的指令,在Worker节点上创建、管理和监控Pod的生命周期。kube-proxy负责处理网络请求,将请求转发到合适的Pod。

通过这种架构,Kubernetes可以动态地管理和调度容器化应用程序,实现高可用性、弹性伸缩和自动化操作。它提供了一种高级抽象的方式来描述应用程序和资源对象,并通过自动化和智能调度来确保应用程序的高效运行。

                 

 

三、安装部署docker

注意:所有主机配置推荐CPU2C+  Memory:2G+

 1、主机初始化配置(所有主机都要配置)

所有主机配置禁用防火墙和selinux 
setenforce 0
iptables -F
systemctl stop firewalld
systemctl disable firewalld
systemctl stop NetworkManager
systemctl disable NetworkManager
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
配置主机名并绑定hosts,不同主机名称不同
cat << EOF >> /etc/hosts
192.168.77.14 k8s-master
192.168.77.15 k8s-node01
192.168.77.16 k8s-node02
EOF

关闭交换分区
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
将IPv6的请求转发到IPv4
cat << EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
查看
modprobe br_netfilter
sysctl -p

 

2、部署docker-ce环境

三台主机上分别部署 Docker 环境,因为 Kubernetes 对容器的编排需要 Docker 的支持(安装的版本是19.03.0)

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum clean all && yum makecache fast 

yum -y install docker-ce-cli-19.03.3 containerd.io

systemctl start docker 

systemctl enable docker

配置docker的阿里源
cat << END > /etc/docker/daemon.json
{
        "registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]
}
END

systemctl daemon-reload

systemctl restart docker

 四、安装部署Kubernetes集群

1、组件介绍

三个节点都需要安装下面三个组件

①、kubeadm:安装工具,使所有的组件都会以容器的方式运行

②、kubectl:客户端连接K8S API工具

③、kubelet:运行在node节点,用来启动容器的工具

2、配置阿里云yum源(所有主机)

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=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
EOF

3、安装kubelet kubeadm kubectl(所有主机)

yum -y install kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
systemctl enable kubelet

kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点或初始化为 master 后才可启动成功

如果在命令执行过程中出现索引 gpg 检查失败的情况, 请使用 yum install -y --nogpgcheck kubelet kubeadm kubectl 来安装

4、配置init-config.yaml(只有主节点配置)

Kubeadm 提供了很多配置项,Kubeadm 配置在 Kubernetes 集群中是存储在ConfigMap 中的,也可将这些配置写入配置文件,方便管理复杂的配置项。Kubeadm 配内容是通过 kubeadm config 命令写入配置文件的。

kubeadm config print init-defaults > init-config.yaml
vim /root/init-config.yaml 
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.77.14		         //master节点IP地址
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master		                         //如果使用域名保证可以解析,或直接使用 IP 地址
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd		                            //etcd 容器挂载到本地的目录
imageRepository: registry.aliyuncs.com/google_containers	//修改为国内地址
kind: ClusterConfiguration
kubernetesVersion: v1.19.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16 	                                //新增加 Pod 网段
scheduler: {}

5、安装master节点 

kubeadm config images list --config init-config.yaml   拉取镜像

kubeadm config images pull --config=init-config.yaml   下载镜像

echo "1" > /proc/sys/net/ipv4/ip_forward
kubeadm init --config=init-config.yaml	//初始化安装K8S

下面红框中标注的是添加集群主节点的信息,给从指定主需要用到

kubectl 默认会在执行的用户家目录下面的.kube 目录下寻找config 文件,这里是将在初始化时[kubeconfig]步骤生成的admin.conf 拷贝到.kube/config
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config 

 6、安装node节点

两个从节点指定主的信息

kubeadm join 192.168.77.14:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:910a7f7c25bcb32f88f28a66ccd142afa38188ee60d4807e9b8aac27b68a8a4d

 到主节点上查看

在初始化 k8s-master 时并没有网络相关配置,所以无法跟 node 节点通信,因此状态都是“NotReady”

今天只学了安装配置,还没有学习网络设置,下一篇文章将学习如何进行网络设置

以上就是Kubernetes的安装与集群部署,如有错误欢迎各位大佬批评指正,我们共同进步

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

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

相关文章

【D3S】集成smart-doc并同步配置到Torna

目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S&#xff08;DDD with SpringBoot&#xff09;为本作者使用DDD过程中开发的框架&#xff0c;目前已可公开查看源码&#…

leetcode26-删除有序数组中的重复项

双指针—快慢指针 慢指针 slow 走在后面&#xff0c;快指针 fast 走在前面探路&#xff0c;找到一个不重复的元素的时候就让slow前进一步并赋值给它。 流程&#xff1a; 代码 class Solution { public:int removeDuplicates(vector<int>& nums) {int slow 0, fas…

【2012年专利】基于中继节点的互联网通信系统和通信路径选择方法

基于中继节点的互联网通信系统和通信路径选择方法 CN102594703A地址基于中继节点的互联网通信系统和通信路径选择方法 ,解决:服务器间直接传输时丢包率高及延时长的缺点包括:服务器之间转发数据包的中继节点计算服务器间最优传输路径的选路决策节点, 本发明涉及一种晶于中继…

【Spring专题】Spring之底层架构核心概念解析

目录 前言前置知识课程内容一、BeanDefinition&#xff1a;图纸二、BeanDefinitionReader&#xff1a;图纸读取器——Spring工厂基础设施之一2.1 AnnotatedBeanDefinitionReader2.2 XmlBeanDefinitionReader2.3 ClassPathBeanDefinitionScanner 三、BeanFactory&#xff1a;生产…

银行电子密码器也远程管理吗?操作步骤如下

企业需要在不同办公地点管理多个资金账户&#xff0c;能不能远程点按读取银行电子密码器呢&#xff1f; 三个字&#xff0c;很简单&#xff01; 可以用密码点按器&#xff01; 有了它就可以自动输入密码和读取验证码&#xff01; 第一步 用双面胶把密码器固定在点按器上&…

【UE4 RTS】04-Camera Pan

前言 本篇实现了CameraPawn的旋转功能。 效果 步骤 1. 打开项目设置&#xff0c;添加两个操作映射 2. 打开玩家控制器“RTS_PlayerController_BP”&#xff0c;新建一个浮点型变量&#xff0c;命名为“PanSpeed” 在事件图表中添加如下节点 此时运行游戏可以发现当鼠标移动…

【学习日记】【FreeRTOS】调度器函数实现详解

写在前面 本文主要是对于 FreeRTOS 中调度器函数实现的详细解释&#xff0c;代码大部分参考了野火 FreeRTOS 教程配套源码&#xff0c;作了一小部分修改。 一、MSP 和 PSP Cortex-M有两种栈空间&#xff0c;主堆栈和进程堆栈。 MSP 用于系统级别和中断处理的堆栈 MSP 用于保…

一文看懂Apipost接口自动化使用方法

随着项目研发进程的不断推进&#xff0c;软件功能不断增多&#xff0c;对于软件测试的要求也越来越高。为了提高测试效率和减少测试成本&#xff0c;许多软件测试团队借助于自动化测试工具来优化测试流程。Apipost也提供了自动化测试工具&#xff0c;在本文中&#xff0c;我们将…

Android Studio System.out.println()中文乱码

第一步&#xff1a; 打开studio64.exe.vmoptions加入-Dfile.encodingUTF-8 第二步&#xff1a; File-Settings-Editor-File Encodings 把所有的编码格式改为UTF-8 尝试跑一下代码&#xff0c;如果还不行&#xff0c;重启IDE 再试试。

利用DNS隧道构建隐蔽CC信道

背景介绍 无论是高级持续性威胁(APT&#xff09;、僵尸网络(Botnet)&#xff0c;还是勒索软件、后门等&#xff0c;命令与控制信道(C &C)都是其重要组成部分&#xff0c;尤其是APT和僵尸网络中的C&C信道决定了其威胁程度。学术界和工业界就C&C方面的研究已逐渐深入…

vue3:新特性

一、react和vue的主要区别 &#xff08;1&#xff09;数据更新上&#xff1a; 1、 react 采用 fiber架构 &#xff0c;使用 链表 表示 DOM 结构可以在 diff 时随时中断和继续&#xff0c;利用requestIdleCallback 在空闲时 diff &#xff0c;防止数据量大 diff 时间长导致卡顿…

Python 之禅

Python 社区的理念都包含在 Tim Peters 撰写的 “Python 之禅” 中 在 Windows 平台的 cmd 命令中打开 python&#xff0c;输入 import this&#xff0c;就能看到 Python 之禅: 翻译&#xff1a; Tim Peters 的 python 之禅Beautiful is better than ugly. # 优美胜于丑陋&am…

生成树协议

文章目录 STP冗余交换网络为什么存在广播风暴&#xff1f;广播的危害&#xff1f;交换环路的危害&#xff1f; 工作机制BPDU什么是最好的bpduBPDU触发机制 STP选举步骤配置协议分析字段分析开销模式端口状态 故障类型根桥故障直连故障间接故障 &#xff08;链路中间可能有HUB&a…

vuejs 设计与实现 - 渲染器的设计

渲染器与响应式系统的结合 本节&#xff0c;我们暂时将渲染器限定在 DOM 平台。既然渲染器用来渲染真实 DOM 元素&#xff0c;那么严格来说&#xff0c;下面的函数就是一个合格的渲染器: // 渲染器&#xff1a; function renderer(domString, container) {container.innerHTM…

中级课程-SSRF(CSRF进阶)

文章目录 成因危害挖掘 成因 危害 挖掘

JUC并发编程之线程锁(一)

目录 1.ReentrantLock(互斥锁) 2.ReentRantReaderWriterLock&#xff08;互斥读写锁&#xff09; 3.StampedLock&#xff08;无障碍锁&#xff09; 4.Condition&#xff08;自定义锁&#xff09; 5.LockSupport 问题引出&#xff1a; 由于传统的线程控制需要用到同步机制Sy…

LeetCode--HOT100题(23)

目录 题目描述&#xff1a;206. 反转链表&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;206. 反转链表&#xff08;简单&#xff09; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 LeetCode做题链接&…

剑指offer56-II.数组中数字出现的次数II

第一种方法非常简单&#xff0c;就是用一个HashMap&#xff0c;key是数组中元素的值&#xff0c;value是出现的次数&#xff0c;所以遍历一遍数组&#xff0c;如果map中没有这个元素就把它put进去value设为1&#xff0c;否则value加1&#xff0c;然后遍历一遍map&#xff0c;如…

tensorflow 1.14 的 demo 02 —— tensorboard 远程访问

tensorflow 1.14.0&#xff0c; 提供远程访问 tensorboard 服务的方法 第一步生成 events 文件&#xff1a; 在上一篇demo的基础上加了一句&#xff0c;如下&#xff0c; tf.summary.FileWriter("./tmp/summary", graphsess1.graph) hello_tensorboard_remote.py …

Celery嵌入工程的使用

文章目录 1.config 1.1 通过app.conf进行配置1.2 通过app.conf.update进行配置1.3 通过配置文件进行配置1.4 通过配置类的方式进行配置2.任务相关 2.1 任务基类(base)2.2 任务名称(name)2.3 任务请求(request)2.4 任务重试(retry) 2.4.1 指定最大重试次数2.4.2 设置重试间隔时间…