Kubernetes学习(一)入门及集群搭建

news2024/11/29 20:35:26

一、简介

1.简介

Kubernetes 最初源于谷歌内部的Borg,Kubernetes 是一个全新的基于容器技术的分布式架构解决方案。

包含几个基本功能:

1.将应用水平扩容到多个集群

2.为扩容的实例提供负载均衡策略

3.提供基本的健康检查和自愈能力

4.实现任务的统一调度

2.发展历史

- 2014年6月 谷歌云计算专家Eric Brewer在旧金山的发布会为这款新的开源工具揭牌。
- 2015年7月22日K8S迭代到 v 1.0并在OSCON大会上正式对外公布。
- 为了建立容器编排领域的标准和规范,Google、RedHat 等开源基础设施领域玩家们,在 2015 年共同牵头发起了名为 CNCF(Cloud Native Computing Foundation)的基金会。Kubernetes 成为 CNCF 最核心的项目。发起成员:AT&T, Box, Cisco, Cloud Foundry Foundation, CoreOS, Cycle Computing, Docker, eBay, Goldman Sachs, Google, Huawei, IBM, Intel, Joyent, Kismatic, Mesosphere, Red Hat, Switch SUPERNAP, Twitter, Univa, VMware and Weaveworks。
- 2018年,超过 1700 开发者成为 Kubernetes 项目社区贡献者,全球有 500 多场沙龙。国内出现大量基于 Kubernetes 的创业公司。
- 2020 年,Kubernetes 项目已经成为贡献者仅次于 Linux 项目的第二大开源项目。成为了业界容器编排的事实标准,各大厂商纷纷宣布支持 Kubernetes 作为容器编排的方案。

3.问什么需要Kubernetes

传统的容器编排痛点

容器技术虽然解决了应用和基础设施异构的问题,让应用可以做到一次构建,多次部署,但在复杂的微服务场景,单靠 Docker 技术还不够,它仍然有以下问题没有解决:
- 集成和编排微服务模块
- 提供按需自动扩容,缩容能力
- 故障自愈
- 集群内的通信

Kubernetes 能解决哪些问题

- 按需的垂直扩容,新的服务器(node)能够轻易的增加或删除
- 按需的水平扩容,容器实例能够轻松扩容,缩容
- 副本控制器,你不用担心副本的状态
- 服务发现和路由
- 自动部署和回滚,如果应用状态错误,可以实现自动回滚

什么时候使用 Kubernetes

- 当你的应用是微服务架构
- 开发者需要快速部署自己的新功能到测试环境进行验证
- 降低硬件资源成本,提高使用率

什么时候不适合使用 Kubernetes

- 应用是轻量级的单体应用,没有高并发的需求
- 团队文化不适应变革

二、Kubernetes架构

 1.主控制(Master Node)节点组件

主控制节点组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的 replicas 字段时,启动新的 pod)。

主控制节点组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有主控制节点组件,并且不会在此计算机上运行用户容器。

apiserver

主节点上负责提供 Kubernetes API 服务的组件;它是 Kubernetes 控制面的前端组件。

etcd

etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。

kube-scheduler

主节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。
调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。

 kube-controller-manager

在主节点上运行控制器的组件。

从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。这些控制器包括:
    1. 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
    3. 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。
    3. 终端控制器(Endpoints Controller): 填充终端(Endpoints)对象(即加入 Service 与 Pod)。
    4. 服务帐户和令牌控制器(Service Account & Token Controllers),为新的命名空间创建默认帐户和 API 访问令牌.

2.从节点(Worker Node)组件

从节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。

kubelet 

在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。

kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。kubelet 不会管理不是由 Kubernetes 创建的容器。

kube-proxy

kube-proxy 是集群中每个节点上运行的网络代理,实现 Kubernetes Service 概念的一部分。
kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

容器运行时(Container Runtime)

容器运行环境是负责运行容器的软件。
Kubernetes 支持多个容器运行环境: Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)。

3. 插件(Addons)

DNS

尽管其他插件都并非严格意义上的必需组件,但几乎所有 Kubernetes 集群都应该有集群 DNS, 因为很多示例都需要 DNS 服务。

Web 界面(仪表盘)

Dashboard 是K ubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。

容器资源监控

容器资源监控 将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。

集群层面日志

集群层面日志 机制负责将容器的日志数据 保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。

三、Kubernetes核心概念

1、Pod

Pod 是 K8S 中最重要也是最基本的概念,Pod 是最小的部署单元,是一组容器的集合。每个 Pod 都由一个特殊的根容器 Pause 容器,以及一个或多个紧密相关的用户业务容器组成。

Pause 容器作为 Pod 的根容器,以它的状态代表整个容器组的状态。K8S 为每个 Pod 都分配了唯一的 IP 地址,称之为 Pod IP。Pod 里的多个业务容器共享 Pause 容器的IP,共享 Pause 容器挂载的 Volume。

2、Label

标签,附加到某个资源上,用于关联对象、查询和筛选。一个 Label 是一个 key=value 的键值对,key 与 value 由用户自己指定。Label 可以附加到各种资源上,一个资源对象可以定义任意数量的 Label,同一个 Label 也可以被添加到任意数量的资源上。

我们可以通过给指定的资源对象捆绑一个或多个不同的 Label 来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等工作。

K8S 通过 Label Selector(标签选择器)来查询和筛选拥有某些 Label 的资源对象。Label Selector 有基于等式( name=label1 )和基于集合( name in (label1, label2) )的两种方式。

3、ReplicaSet(RC)

ReplicaSet 用来确保预期的 Pod 副本数量,如果有过多的 Pod 副本在运行,系统就会停掉一些 Pod,否则系统就会再自动创建一些 Pod。

我们很少单独使用 ReplicaSet,它主要被 Deployment 这个更高层的资源对象使用,从而形成一整套 Pod 创建、删除、更新的编排机制。

4、Deployment

Deployment 用于部署无状态应用,Deployment 为 Pod 和 ReplicaSet 提供声明式更新,只需要在 Deployment 描述想要的目标状态,Deployment 就会将 Pod 和 ReplicaSet 的实际状态改变到目标状态。

5、Horizontal Pod Autoscaler(HPA)

HPA 为 Pod 横向自动扩容,也是 K8S 的一种资源对象。HPA 通过追踪分析 RC 的所有目标 Pod 的负载变化情况,来确定是否需要针对性调整目标 Pod 的副本数量。

6、Service

Service 定义了一个服务的访问入口,通过 Label Selector 与 Pod 副本集群之间“无缝对接”,定义了一组 Pod 的访问策略,防止 Pod 失联。

创建 Service 时,K8S会自动为它分配一个全局唯一的虚拟 IP 地址,即 Cluster IP。服务发现就是通过 Service 的 Name 和 Service 的 ClusterIP 地址做一个 DNS 域名映射来解决的。

7、Namespace

命名空间,Namespace 多用于实现多租户的资源隔离。Namespace 通过将集群内部的资源对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组。

K8S 集群在启动后,会创建一个名为 default 的 Namespace,如果不特别指明 Namespace,创建的 Pod、RC、Service 都将被创建到 default 下。

当我们给每个租户创建一个 Namespace 来实现多租户的资源隔离时,还可以结合 K8S 的资源配额管理,限定不同租户能占用的资源,例如 CPU 使用量、内存使用量等。

四、Kubernetes部署

部署目标

  • 1个Master节点,2个Worker节点
  • 所有节点上安装Docker和kubeadm,kubelet
  • 部署网络插件flannel

部署架构

ip域名备注安装软件
192.168.70.80master主节点Docker Kubeadm kubelet kubectl flannel
192.168.70.81node1从节点1Docker Kubeadm kubelet kubectl
192.168.70.82node2从节点2Docker Kubeadm kubelet kubectl

环境准备

操作系统设置

#配置内核参数,将桥接的IPv4流量传递到iptables的链
[root@master01 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

#将桥接的ipv4流量传递到iptables的链
modprobe br_netfilter
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

#关闭防火墙 
systemctl stop firewalld
systemctl disable firewalld

#关闭 selinux
#临时生效
setenforce 0
#永久生效
sed -i 's/enforcing/disabled/' /etc/selinux/config

#关闭 swap
#临时关闭
swapoff -a
# 永久生效
vim /etc/fstab
#将 [UUID=5b59fd54-eaad-41d6-90b2-ce28ac65dd81 swap                    swap    defaults        0 0] 这一行注释掉

#配置 Master 和 work 节点的域名
vim /etc/hosts
 192.168.70.80 master
 192.168.70.81 node1
 192.168.70.82 node2

#同步系统时间
ntpdate 0.asia.pool.ntp.org

阿里云yum源

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

安装Docker

1. 添加依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

2. 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 
3. 查看仓库中所有Docker版本
yum list docker-ce --showduplicates | sort -r
 
4. 安装Docker  
yum -y install docker-ce

5. 启动并加入开机启动
systemctl start docker
systemctl enable docker

配置Docker, K8S的阿里云yum源

1.yum源
[root@master ~]# cat >>/etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
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
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
[root@master ~]# yum clean all
[root@master ~]# yum repolist

2.安装并启动 docker
yum install -y docker-ce.x86_64 docker-ce-cli.x86_64 containerd.io.x86_64

mkdir -p /etc/docker

cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

3.编辑/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd

4. Restart Docker
systemctl daemon-reload
systemctl enable docker
systemctl restart docker

安装kubelet、kubeadm、kubectl

yum remove -y kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl

重启 docker,并启动 kubelet

systemctl enable kubelet && systemctl start kubelet

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

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

相关文章

电机无位置控制方法研究

无位置控制方法研究 1.无位置控制技术研究现状 2.反电动势过零检测法 3.反电动势三次谐波积分检测法 4.续流二极管法 5.磁链法 6.扩展卡尔曼滤波算法&#xff08;EKF&#xff09; 7.基于扩展卡尔曼滤波算法&#xff08;EKF&#xff09;的转速及位置估算 8.电感测量法 9.涡流效…

LeetCode-878. 第 N 个神奇数字【数学,二分查找,找规律】

LeetCode-878. 第 N 个神奇数字【数学&#xff0c;二分查找&#xff0c;找规律】 题目描述&#xff1a;解题思路一&#xff1a;二分答案容斥原理。给定一个上下界&#xff0c;然后依次增大下界或者减小上界&#xff0c;直到只剩一个答案。容斥原理是&#xff0c;加上两个集合&a…

六、TCP实现聊天

客户端&#xff1a; 连接服务器 Socket(address,port)发送消息 import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.nio.charset.StandardCharsets;/*** 客…

LabVIEW使用VI Snippets存储和共享重用代码段

LabVIEW使用VI Snippets存储和共享重用代码段 VI Snippets是存储、共享和重用LabVIEW代码小部分的新方式。VI代码段将截图的可移植性与VI文件的功能结合在标准PNG图像中嵌入LabVIEW代码。当将VI代码段PNG图像拖到框图上时&#xff0c;它会将代码片段作为图形代码拖放&#xff…

【C++】重载运算符+-=>/*[]==++-- MyString 智能指针(* ->)

目录 15.重载运算符 15.1 eg.Person 15.2 eg.MyString 15.3 智能指针 15.重载运算符 定义&#xff1a;给原有的运算符赋予新的意义。 为什么重载<<或>>一定要用友元&#xff1f; 如果是重载双目操作符&#xff08;即为类的成员函数&#xff09;&#xff0c;就…

10年老码农亲授:什么是分布式系统

首先&#xff0c;分布式系统是在硬件成本日益提高&#xff0c;或者单机提升的成本过于昂贵而程序的问题得不到解决时&#xff0c;为了解决更加高效、内容量更大的数据而采取的一种解决手段。 而分布式系统又分为两个部分&#xff0c;计算和存储&#xff0c;而准确来说这两部分…

知行之桥EDI系统2022版Tomcat部署

1.首先需要下载Tomcat&#xff0c;可在Tomcat官网获取&#xff0c;本部署步骤以apache-tomcat-9.0.67.tar.gz为例&#xff0c;通过XFTP将该包放在服务器上的指定位置&#xff0c;如/opt/test 进入/opt/test文件夹后&#xff0c;在命令行执行以下命令对该包进行解压缩 tar -zxv…

大数据毕设 - 公交数据分析与可视化系统(大数据 python flask)

文章目录0 前言1 课题背景2 具体实现3 Flask框架4 ECharts可视化工具5 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对毕设的要求越…

Smart Tomcat + Servlet API的应用

文章目录前言一、Smart Tomcat二、Servlet API1.HttpServlet&#xff08;1&#xff09;方法&#xff08;2&#xff09;描述servlet的生命周期&#xff08;3&#xff09;案例2.HttpServletRequest&#xff08;1&#xff09;方法&#xff08;2&#xff09;代码示例打印请求信息获…

若依框架图片上传、富文本框编辑器功能

文章目录一、前言二、效果三、编码过程1.前端&#xff1a;index.vueprojectShow.js富文本框: Editor/index.vue图片上传&#xff1a;ImgUploadCropper/index.vue2.后端&#xff1a;实体ProjectShowProjectShowControllerIProjectShowServiceProjectShowServiceImplProjectShowM…

Linux命令大全

前言 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发&#xff0c;接触 Linux机会相对较少&#xff0c;因此往往容易忽视它。但是学好它却是程序员必备修养之一。 作者使用的是阿里云服务器 ECS &#xff08;最便宜的那种&#xff09; CentOS 7.7 64位…

指针初阶(C语言)

指针 指针是什么 内存划分是一个字节一个字节来划分的&#xff0c;其中每个字节都有一个编号来标识它&#xff0c;我们将这个编号称为地址&#xff0c;而指针就是地址 注意&#xff1a;编号是不占内存空间的&#xff0c;&#xff08;这些编号在内存中用十六进制表示&#xff0…

正厚软件 | App测试面试题及参考答案

最近整理了一些关于App测试的面试题。 本参照答案是本人在工作实践中总结&#xff0c;仅代表个人观点&#xff0c;如有错误&#xff0c;请谅解。 问&#xff1a;说一些你在测试过程中常用到的adb命名 答&#xff1a;回答本问题时&#xff0c;首先不要想到哪个命名就说哪个命令…

锐捷ISIS基础实验

目录 ISIS理论讲解 配置ISIS邻居建立 配置路由渗透&#xff08;泄露&#xff09; ISIS其它的配置特性 配置ISIS时间属性 配置ISIS认证 ISIS理论讲解 ISIS——基本概念1&#xff08;邻居建立、路由计算、报文封装&#xff09;_静下心来敲木鱼的博客-CSDN博客https://blog…

2022年全球高被引科学家公布

博士后、访问学者及联合培养申请者&#xff0c;都希望去名校及牛导麾下深造。名校有世界几大排名体系做参考&#xff0c;其知名度毋庸置疑。但牛导的概念是什么呢&#xff1f;知识人网小编在此介绍最新推出的“2022年度高被引科学家”&#xff0c;这里云集了全球自然科学和社会…

教你使用 SO_REUSEPORT 套接字选项提升服务性能

前言 Linux 网络栈中有一个相对较新的特性——SO_REUSEPORT 套接字选项&#xff0c;可以使用它来提升你的服务性能。 图 1: 上面的服务是使用并行监听器来避免请求连接瓶颈&#xff0c;而下面的服务只使用一个监听器来接收连接 概要 HAProxy 和 NGINX 是少数几个使用 Linux …

线段树什么的不是简简单单嘛,我教你!:基础篇

线段树什么的不是简简单单嘛&#xff0c;我教你&#xff01;&#xff1a;基础篇 零、序言——万物滴开篇 也许你是苦于笔试的打工人&#xff0c;也许你是步入算法圈不久的小小萌新&#xff08;我也是萌新&#xff09; &#xff0c;也许你是在网上搜索数据结构课设的倒霉学生。…

2049. 统计最高分的节点数目-数组树构造+遍历求解最大值数目

2049. 统计最高分的节点数目-数组树构造遍历求解最大值数目 给你一棵根节点为 0 的 二叉树 &#xff0c;它总共有 n 个节点&#xff0c;节点编号为 0 到 n - 1 。同时给你一个下标从 0 开始的整数数组 parents 表示这棵树&#xff0c;其中 parents[i] 是节点 i 的父节点。由于…

音视频 - 视频编码原理

目录 视频编码主要分为 图像的冗余 熵编码 帧内预测 帧间预测 DCT变换和量化 编码器比较 清晰度和耗时对比 一部电影1080P&#xff0c;帧率25fps&#xff0c;时长2小时&#xff0c;文件大小 1920x1080x1.5x25x2x360 521.4G 数据量非常大&#xff0c;对存储和网络传输都…

GMC Graph-Based Multi-View Clustering

GMC Graph-Based Multi-View Clustering 基于图的多视图聚类 abstract 现有的大多数方法没有充分考虑不同视图的权重&#xff0c;需要额外的聚类步骤来生成最终的聚类。还通常基于所有视图的固定图相似矩阵来优化目标。 本文提出了一种通用的基于图的多视图聚类算法(GMC)来解…