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

news/2024/6/3 17:47:58 标签: 运维, 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的安装与集群部署,如有错误欢迎各位大佬批评指正,我们共同进步


http://www.niftyadmin.cn/n/4925030.html

相关文章

95个优秀深度学习公共数据集分享,涵盖目标检测、自动驾驶、图像分类等12个大方向【附下载】

近年来&#xff0c;随着人工智能的快速发展&#xff0c;我们对数据集的需求越来越多&#xff0c;一方面&#xff0c;数据集可以帮助我们做练习实践&#xff0c;另一方面&#xff0c;这些数据集同样也能帮助更多研究机构进行更深入的数据挖掘。对于人工智能领域的同学来说&#…

集合工具类 Collections:提升集合操作效率

文章目录 多元素添加&#xff1a;addAll 方法随机置换&#xff1a;shuffle 方法自定义对象排序&#xff1a;sort 方法总结 在Java的集合框架中&#xff0c;Collections 是一个包含了许多操作集合的静态方法的工具类。通过使用 Collections 类提供的方法&#xff0c;我们能够更加…

【Linux】详解进程状态之僵尸进程——孤儿进程

目录 &#x1f31e;专栏导读 &#x1f31b;什么是进程 ⭐什么是PCB&#xff1f; &#x1f31b;查看进程 &#x1f31b;如何通过系统调用查看进程PID &#x1f31b;fork &#x1f31e;认识进程状态 &#x1f31b;查看进程状态 &#x1f31b;R状态 ⭐例如&#xff1a…

docker删除容器时报错:Error response from daemon: reference does not exist

前言 之前使用的docker版本太低了&#xff0c;升级高版本docker之后的错误。 低版本docker&#xff08;1.30.1&#xff09;中的镜像有&#xff1a;golang、mysql&#xff0c;将docker升级为24.0.5并新拉取mysql最新版本之后&#xff0c;执行docker images命令&#xff0c;发现…

Linux下查询文件夹中文件数量的方法

一、前言 在Linux系统中&#xff0c;我们经常需要查询文件夹中包含多少文件。本文将介绍三种在Linux中查询文件夹中文件数量的方法&#xff0c;帮助你轻松获取所需信息。 二、方法 1、使用ls命令和wc命令 使用ls命令的-l选项和管道操作符|结合wc命令来统计文件数量&#xf…

2023/08/09 IOS设计规范收集

背景&#xff1a;绘制原型图时&#xff0c;不确定状态栏、标签栏、侧边margin具体怎么设置&#xff0c;很困惑… iphone 界面尺寸 左边是能找到最新的设计规范&#xff0c;右边是auxre10自带画布尺寸显示&#xff0c;结合做参考 ios界面结构 状态栏 状态栏位于界面最上方&…

2023华数杯C题总结

前言 对这次比赛中遇到的问题和卡住的思路进行复盘&#xff0c;整理相关心得&#xff0c;供以后比赛参考 &#x1f9e1;1.认识数据类型&#x1f9e1; 连续变量&#xff1a;母亲年龄、妊娠时间、CBTS、EPDS、HADS、整晚睡醒时间、婴儿年龄 无序分类变量&#xff1a;婚姻状态、…

无涯教程-Perl - getpriority函数

描述 此函数返回进程(PRIO_PROCESS),进程组(PRIO_PGRP)或用户(PRIO_USER)的当前优先级。 参数WHICH指定要为PRIO_PROCESS,PRIO_PGRP或PRIO_USER之一设置优先级的实体,WHO是要设置的进程ID或用户ID。 WHO的值为0定义了当前流程,流程组或用户。这会在不支持系统getpriority()函…