找回密码
 立即注册
快捷导航

[Docker/K8s] Kubernetes初体验 - 概念解读

[复制链接]
东篱 2023-7-18 23:18:20 | 显示全部楼层
Kubernetes 是 Google 团队发起的一个开源项目,它的目标是管理跨多个主机的容器,用于自动部署、扩展和管理容器化的应用程序,主要实现语言为 Go 语言。

集群:是一组节点,这些节点可以是物理服务器或者虚拟机,在他上面安装了Kubernetes环境。​​

从集群中的拿出某个节点作为Master,该Master 负责管理集群, master 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。
节点是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。每个工作节点都有一个 kubelet,它是管理节点并与 Kubernetes Master 节点进行通信的代理。节点上还应具有处理容器操作的容器运行时,例如 Docker 或 rkt。

一个 Kubernetes 工作集群至少有三个节点。 Master 管理集群,而 节点 用于托管正在运行的应用程序。

当您在 Kubernetes 上部署应用程序时,您可以告诉 master 启动应用程序容器。Master 调度容器在集群的节点上运行。节点使用 Master 公开的 Kubernetes API 与 Master 通信。用户也可以直接使用 Kubernetes 的 API 与集群交互。

安装好K8S后,右上角Create创建,有三个选项,选择 Create An App,输入如下:
Kubernetes初体验 - 概念解读7434 作者:东篱 帖子ID:508
点击 Deploy,会跳到 Workloads 页面:
Kubernetes初体验 - 概念解读115 作者:东篱 帖子ID:508
其中,Deployments有刚才创建的mynginx,Pods有 mynginx-6867b5b964-vlqh7,进入这个;
Kubernetes初体验 - 概念解读3958 作者:东篱 帖子ID:508
显示 Details 信息,有 Name/Namespace/Lables/等等...

Pod
是一组紧密关联的容器集合,它们共享 PID、IPC、Network 和 UTS namespace,是Kubernetes 调度的基本单位。
Pod 的设计理念是:支持多个容器在一个 Pod 中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
白话文:Pods里面是一个或多个容器的集合,其中Pods内是共享文件系统、网络;网络共享说明里面的每个容器都分配相同的ip,他们之间是通过ol来互相调用,用端口区分;
Kubernetes初体验 - 概念解读8085 作者:东篱 帖子ID:508

k8s使用yaml或json来创建一个容器
右上角Create创建,有三个选项,选择 Create from text input,输入下面内容:
apiVersion: v1
kind: Pod
metadata:  
  name: nginx 
然后点击 Deploy,会跳到 Workloads 页面:
Kubernetes初体验 - 概念解读6568 作者:东篱 帖子ID:508
注意,用这种方法创建,Deployments栏并没有,只在 Pods 栏中显示 nginx;说明用 Create from text input 创建 和 Create An App 创建 是不一样的;

Lable
识别 Kubernetes 对象的标签,以 key/value 的方式附加到对象上(key最长不能超过63字节,value 可以为空,也可以是不超过253字节的字符串)。

Label 不提供唯一性,并且实际上经常是很多对象(如Pods)都使用相同的 label 来标志具体的应用。

Label 定义好后其他对象可以使用 Label Selector 来选择一组相同 label 的对象(比如Service 用 label 来选择一组 Pod)。Label Selector支持以下几种方式:
  • 等式,如app=nginx和env!=production
  • 集合,如env in (production, qa)
  • 多个label(它们之间是AND关系),如app=nginx,env=test

Namespace
Namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pods, services,deployments 等都是属于某一个 namespace 的(默认是default),而 Node, PersistentVolumes 等则不属于任何 namespace。

deployment 和 pod 是什么关系?
进入 deployment 中的mynginx,有New Replica Set 栏:
Kubernetes初体验 - 概念解读7476 作者:东篱 帖子ID:508
再进入,发现Replica Sets 有 Pods 栏:
Kubernetes初体验 - 概念解读6174 作者:东篱 帖子ID:508
Deployment 通过 Replica Sets 桥接,指定了有多少个 Pods !

Deployment
是否手动创建 Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么,能否将Pods划到逻辑组里?

Deployment 确保任意时间都有指定数量的 Pod“副本”在运行。如果为某个 Pod 创建了Deployment 并且指定3个副本,它会创建3个 Pod,并且持续监控它们。如果某个 Pod 不响应,那么 Deployment 会替换它,保持总数为3.

如果之前不响应的 Pod 恢复了,现在就有4个 Pod 了,那么 Deployment 会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Deployment 会立刻启动2个新 Pod,保证总数为5。Deployment 还支持回滚和滚动升级。

当创建 Deployment 时,需要指定两个东西:
  • Pod模板:用来创建 Pod 副本的模板
  • Label标签:Deployment 需要监控的 Pod 的标签。

现在已经创建了 Pod 的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是 Service。

Service
Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。匹配 labels 的Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些endpoints 上。

每个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务,而不需要了解后端容器的运行。

Kubernetes初体验 - 概念解读6823 作者:东篱 帖子ID:508




回复

使用道具 举报

主题

0

回帖

380

积分

自成一派

 楼主| 东篱 2023-7-19 04:56:22 | 显示全部楼层
k8sn1:192.168.31.200
k8sn2:192.168.31.201
k8sn3:192.168.31.202

设置主机名
hostnamectl set-hostname k8sn1
hostnamectl set-hostname k8sn2
hostnamectl set-hostname k8sn3

同步hosts文件
cat >> /etc/hosts <<EOF
192.168.31.200 k8sn1
192.168.31.201 k8sn2
192.168.31.202 k8sn3
EOF

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

关闭SELINUX
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

关闭swap分区
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

同步时间
apt install ntpdate -y
ntpdate time.windows.com

安装containerd


   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-10-30 16:24

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表