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

一、概述

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的安装与集群部署,如有错误欢迎各位大佬批评指正,我们共同进步

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优维低代码实践:对接数据

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

2023-08-09 LeetCode每日一题(整数的各位积和之差)

2023-08-09每日一题 一、题目编号 1281. 整数的各位积和之差二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数 n&#xff0c;请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例1&#xff1a; 示例2&#xff1a; 提示&#xff1a; 1 …

遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素

一、遍历集合List的五种方法 测试数据 List<String> list new ArrayList<>(); list.add("A");list.add("B");list.add("C");1. 普通for循环 普通for循环&#xff0c;通过索引遍历 for (int i 0; i < list.size(); i) {Syst…

数据清理在数据科学中的重要性

什么是数据清理&#xff1f; 推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 在数据科学中&#xff0c;数据清理是识别不正确数据并修复错误的过程&#xff0c;以便最终数据集可供使用。错误可能包括重复字段、格式不正确、字段不完整、数据不相关或不准…

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建SpringSecurity权限框架

1.Cloud Studio&#xff08;云端 IDE&#xff09;简介 Cloud Studio 是基于浏览器的集成式开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能在线编程。 Clou…

python之prettytable库的使用

文章目录 一 什么是prettytable二 prettytable的简单使用1. 添加表头2. 添加行3. 添加列4. 设置对齐方式4. 设置输出表格样式5. 自定义边框样式6. 其它功能 三 prettytable在实际中的使用 一 什么是prettytable prettytable是Python的一个第三方工具库&#xff0c;用于创建漂亮…

微信云开发-数据库操作

文章目录 前提初始化数据库插入数据查询数据获取一条数据获取多条数据查询指令 更新数据更新指令 删除数据总结 前提 首先有1个集合(名称:todos). 其中集合中的数据为: {// 计划描述"description": "learn mini-program cloud service",// 截止日期"…

软件系统测试报告

1.简介 1.1.编写目的 本文档是对重庆市XXX项目验收测试所做的说明&#xff0c;为充分利用已有的软硬件资源&#xff0c;配合对系统应用模块的运行测试方案,查缺补漏完善系统的各项具体功能,保证项目的顺利进行&#xff0c;本测试报告有助于实现以下目标&#xff1a; 明确本次…

Mermaid语法使用

Mermaid语法使用 1. 基础类1.1 流程图1.2 时序图 2. 工程图2.1 类图2.2 Git图 1. 基础类 1.1 流程图 graph TBid1(圆角矩形)--普通线-->id2[矩形];subgraph 子图id2粗线>id3{菱形}id3-. 虚线.->id4>右向旗帜]id3--无箭头---id5((圆形))end方向定义 用词含义TB从…

[LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)

1.题目 344.反转字符串(Easy) 1.代码 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 双指针left,right 0, len(s)-1while left < right:temp s[left]s[…

Spring Boot统一处理功能——拦截器

1.用户登录权限校验 ⽤户登录权限的发展从之前每个⽅法中⾃⼰验证⽤户登录权限&#xff0c;到现在统⼀的⽤户登录验证处理&#xff0c;它是⼀个逐渐完善和逐渐优化的过程。 1.1最初用户登录 我们先来回顾⼀下最初⽤户登录验证的实现⽅法&#xff1a; RestController RequestMap…

【OpenGauss源码学习 —— 执行算子(SeqScan算子)】

执行算子&#xff08;SeqScan算子&#xff09; 执行算子概述扫描算子SeqScan算子ExecInitSeqScan函数InitScanRelation函数ExecSeqScan函数 总结 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵…

Unity制作护盾——2、力场冲击波护盾

Unity制作力场护盾 大家好&#xff0c;我是阿赵。   继续做护盾&#xff0c;这一期做一个力场冲击波护盾。 一、效果展示 主要的效果并不是这个球&#xff0c;而是护盾在被攻击的时候&#xff0c;会出现一个扩散的冲击波。比如上图在右边出现了冲击波 如果在左边被攻击&am…

Java——基础语法(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Pytorch深度学习-----现有网络模型的使用及修改(VGG16模型)

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

Spring(13) IOC的工作流程

目录 一、定义二、Bean的声明方式三、IOC的工作流程 一、定义 IOC&#xff1a;全称是 Inversion Of Control&#xff0c;也就是控制反转&#xff0c;它的核心思想是把对象的管理权限交给容器。应用程序如果需要使用某个对象的实例&#xff0c;那么直接从 IOC 容器里面去获取就…

【自动化测试框架】关于unitttest你需要知道的事

一、UnitTest单元测试框架提供了那些功能 1.提供用例组织和执行 如何定义一条“测试用例”? 如何灵活地控制这些“测试用例”的执行? 2.提供丰定的断言方法 当测试用例的执行结果与预期结果不一致时&#xff0c;判定测试用例失败。在自动化测试中&#xff0c;通过“断言”…

PPT分割图片

想把一个图片拆分成很多部分改怎么做呢? 如下图所示: 图片填充法 第一步, 画一些线条, 与图片对齐: 第二步, 全选所有线条, 组合 第三步, 填充图片. 先复制图片&#xff0c;然后选中组合后的形状&#xff0c;设置形状格式&#xff0c;填充选择为图片或纹理填充&#xff0…

详细介绍渗透测试与漏洞扫描

一、概念 渗透测试&#xff1a; 渗透测试并没有一个标准的定义&#xff0c;国外一些安全组织达成共识的通用说法&#xff1b;通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动的主动分析…

Web安全——Burp Suite基础上

Burp Suite基础 一、Burp Suite安装和环境配置如何命令行启动Burp Suite 二、Burp Suite代理和浏览器设置FireFox设置 三、如何使用Burp Suite代理1、Burp Proxy基本使用2、数据拦截与控制3、可选项配置Options客户端请求消息拦截服务器端返回消息拦截服务器返回消息修改正则表…