k8s教程(基础篇)-入门及案例

article/2025/6/21 9:08:50

文章目录

  • 1. 了解 Kubernetes
    • 1.1 Kubernetes是什么
    • 1.2 Kubernetes的基本知识
      • 1.2.1 Service
      • 1.2.2 Pod
  • 2. 为什么要用 Kubernetes
  • 3. 从一个简单的例子开始
    • 3.1 启动 MySQL 服务
      • 3.1.1 Deployment定义文件
      • 3.1.2 service定义文件
    • 3.2 启动 Tomcat应用
      • 3.2.1 Deployment定义文件
      • 3.2.2 service定义文件
    • 3.3 通过浏览器访问网页

1. 了解 Kubernetes

1.1 Kubernetes是什么

Kubernetes 是谷歌十几年来大规模容器技术应用的重要成果,是谷歌严格保密十几年的秘密武器一一 Borg 的一个开源版本。

通过简单阅读下列内容,对kubernetes有个感性的认知:

  • Kubernetes 也是一个全新的基于容器技术的分布式架构领先方案,是容器云的优秀平台选型方案,已成为新一代的基于容器技术的 PaaS 平台的重要底层框架,也是云原生技术生态圈的核心,服务网格(Service Mesh)、无服务器架构(Serverless)等新一代分布式架构框架及技术纷纷基于 Kubernetes 实现。
  • Kubernetes提供了强大的自动化机制,系统后期的运维难度和运维成本大幅度降低。
  • Kubernetes 是一个开放的开发平台,它不局限于任何一种语言,没有限定任何编程接口,所以不论是用 Java、Go、C++还是用 Python 编写的服务,都可以被映射为 KubernetesService(服务),并通过标准的 TCP 通信协议进行交互。
  • Kubernetes 是一个完备的分布式系统支撑平台Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。
  • Kubernetes 提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。因此,Kubernetes 是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。

1.2 Kubernetes的基本知识

1.2.1 Service

Kubernetes 中,Service是分布式集群架构的核心,一个 Service 对象拥有如下关键特征:

  • 拥有唯一指定的名称(比如 mysql-server);
  • 拥有一个虚拟IP地址(ClusterIP 地址)和端口号;
  • 能够提供某种远程服务能力;
  • 能够将客户端对服务的访问请求转发到一组容器应用上。

每个服务进程都有一个独立的 Endpoint (IP+Port)访问点,但 Kubernetes 能够让我们通过 Service (ClusterIP+Service Port)连接指定的服务。更重要的是,这个 Service 本身一旦创建就不再变化,这意味着我们再也不用为 Kubernetes集群中应用服务进程IP地址变来变去的问题头疼了。

Kubernetes设计了Pod对象为容器提供了强大的隔离功能,我们有必要把 Service 提供服务的这组进程放入容器中进行隔离。Kubernetes 会给每个Pod都贴上一个标签(Label),例如MySQL Service 的标签选择器的选择条件为 name=mysql,意为该 Service 要作用于所有包含 name=mysql 标签的 Pod,这样一来,就巧妙解决了 ServicePod的关联问题。

1.2.2 Pod

Pod的概念:

  • 首先,Pod 运行在一个被称为节点(Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公有云中的一个虚拟机,在一个节点上能够运行多个 Pod
  • 其次,在每个 Pod 中都运行着一个特殊的被称为 Pause 的容器,其他容器则为业务容器,这些业务容器共享 Pause 容器的网络栈和 Volume 挂载卷,因此它们之间的通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个 Pod 中;
  • 最后,需要注意的是,并不是每个 Pod 和它里面运行的容器都能被映射到一个 Service上,只有提供服务(无论是对内还是对外)的那组 Pod 才会被映射为一个服务

在集群管理方面,Kubernetes 将集群中的机器划分为一个 Master 和一些Node:

  • Master上运行着集群管理相关的一些进程kube-apiserver、kube- controller-manager kube-scheduler,这些进程实现了整个集群的资源管理、Pod 调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是自动完成的。
  • Node 作为集群中的工作节点,其上运行着真正的应用程序。在 Node 上,Kubernetes 管理的最小运行单元是 Pod。在 Node 上运行着 Kuberneteskubeletkube-proxy 服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。

在这里插入图片描述

2. 为什么要用 Kubernetes

使用Kubernetes的理由:

  • IT 行业从来都是由新技术驱动的。Kubernetes是软件领域近几年来最具创新的容器技术,涵盖了架构、研发、部署、运维等全系列软件开发流程,不仅对互联网公司的产品产生了极大影响,也对传统行业的 IT 技术产生了越来越强的冲击。
  • 市面上几乎所有提供云基础设施的公司都以原生形式将 Kubernetes 作为底层平台。例如腾讯自研的 TKEx 容器平台的底层也使用了 Kubernetes 原生技术,服务于腾讯的各种业务系统,包括腾讯会议、腾讯课堂、QQ 及腾讯看点等,目前这些业务已运行的 Kubernetes集群规模达到几百万 CPU 核数。

3. 从一个简单的例子开始

需求:JSP 页面通过 JDBC 直接访问 MySQL 数据库并展示数据。
在这里插入图片描述

3.1 启动 MySQL 服务

3.1.1 Deployment定义文件

首先,为 MySQL 服务创建一个 Deployment 定义文件 mysql-deploy.yaml,下面给出了该文件的完整内容和说明:
在这里插入图片描述
以上 YAML 定义文件中:

  • kind 属性用来表明此资源对象的类型,比如这里的属性值表示这是一个 Deployment;
  • spec 部分是 Deployment 的相关属性定义。比如:spec.selectorDeployment Pod 选择器,符合条件的 Pod 实例受到该 Deployment 的管理,确保在当前集群中始终有且仅有 replicas Pod 实例在运行(这里设置 replicas=1, 表示只能运行一个 MySQL Pod 实例)。
  • 当在集群中运行的Pod数量少于 replicas 时,Deployment 控制器会根据在 spec.template 部分定义的Pod模板生成一个新的Pod实例spec.template.metadata.labels 指定了该Pod的标签,labels 必须匹配之前的 spec.selector

创建好mysql-deploy.yaml 文件后,为了将它发布到 Kubernetes集群中,我们在 Master上运行如下命令:
在这里插入图片描述
接下来,运行 kubectl命令查看刚刚创建的 Deployment:
在这里插入图片描述
查看 Pod 的创建情况时,可以运行下面的命令:
在这里插入图片描述
可以看到一个名称为mysql-85f4b4cdf4-k97whPod 实例,这是 Kubernetes 根据 mysql 这个 Deployment 的定义自动创建的 Pod

由于 Pod 的调度和创建需要花费一定的时间,比如需要确定调度到哪个节点上,而且下载 Pod 所需的容器镜像也需要一段时间,所以一开始Pod的状态为 Pending,在 Pod 成功创建启动完成后,其状态最终会更新为 Running

我们可以在 Kubernetes 节点的服务器上通过 docker ps 指令查看正在运行的容器,发现提供 MySQL 服务的 Pod 容器已创建且正常运行,并且 MySQL Pod 对应的容器多创建了一个 Pause 容器,该容器就是Pod的根容器。
在这里插入图片描述

3.1.2 service定义文件

最后,创建一个与之关联的 Kubernetes Service--MySQL 的定义文件(文件名为 mysql-svc.yaml),完整的内容和说明如下:
在这里插入图片描述
其中:

  • metadata.nameService的服务名(ServiceName);
  • spec.ports属性定义了 Service 的虚端口;
  • spec. selector 确定了哪些 Pod 副本(实例)对应本服务。

类似地,我们通过 kubectl create 命令创建 service 对象:
在这里插入图片描述
运行 kubectl get 命令,查看刚刚创建的 Service 对象:
在这里插入图片描述
可以发现,MySQL 服务被分配了一个值为 10.245.161.22ClusterIP 地址(在不同环境中分配的 IP 地址可能不同)。随后,在 Kubernetes 集群中新创建的其他 Pod 就可以通过 ServiceClusterIP+端口号 3306 来连接和访问它了。

通常,ClusterIP 地址是在 Service创建后由 Kubernetes 系统自动分配的,其他 Pod 无法预先知道某个 ServiceClusterIP 地址,因此需要一个服务发现机制来找到这个服务。为此,Kubernetes最初巧妙地使用了 Linux 环境变量(Environment Variable)来解决这个问题。根据 Service的唯一名称,容器可以从环境变量中获取Service对应的ClusterIP地址和端口号,从而发起TCP/IP 连接请求

3.2 启动 Tomcat应用

3.2.1 Deployment定义文件

前面定义和启动了 MySQL 服务,接下来采用同样的步骤完成 Tomcat 应用的启动。首先,创建对应的 RC文件 myweb--deploy.yaml,内容如下:
在这里插入图片描述
注意:Tomcat 容器内,应用将使用环境变量 MYSQL_SERVICE_HOST 的值连接 MySQL 服务,但这里为什么没有注册该环境变量呢?这是因为 Kubernetes 会自动将已存在的 Service 对象以环境变量的形式展现在新生成的 Pod 。其更安全、可靠的方法是使用服务的名称 mysql,这就要求集群内的 DNS 服务(kube- dns)正常运行。运行下面的命令,完成 Deployment 的创建和验证工作:
在这里插入图片描述

3.2.2 service定义文件

最后,创建对应的 Service,以下是完整的 YAML 定义文件(myweb- svc.yaml):
在这里插入图片描述

type: NodePort和“nodePort:30001”表明此 Service开启了 NodePort 格式的外网访问模式。比如,在 Kubernetes 集群外,客户端的浏览器可以通过 30001 端口访问 myweb(对应 8080 的虚端口,运行 kubectl create 命令进行创建:
在这里插入图片描述
运行 kubectl get命令,查看已创建的service:
在这里插入图片描述

3.3 通过浏览器访问网页

经过上面的流程,我们终于成功实现了 Kubernetes上第 1 个例子的部署、搭建工作。现在一起来见证成果吧!在你的笔记本上打开浏览器,输入“http:/虚拟机 IP:30001/demo/”。

比如虚拟机 IP 为 192.168.18.131(可以通过 pa 命令进行查询),在浏览器里输入地址 http: /192.168.18.131:30001/demo/后,可以看到如图1.2 所示的网页界面
在这里插入图片描述


http://chatgpt.dhexx.cn/article/eHGoFi4J.shtml

相关文章

k8s搭建(超详细,保姆级教程)

1、简介 这里就不赘述,想要了解的朋友直接去这里深入了解什么是K8S。 2、环境要求 2台以上机器,操作系统 CentOS7.7-64位系统硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络互通可以…

k8s教程----零基础快速入门

k8s详解教程----零基础快速入门 前言: Kubernetes(k8s)作为云原生的核心平台,吸引了越来越多的运维、开发、测试以及其他技术员去了解学习。随着行业越来越内卷,k8s已经被广泛使用,作为一名运维人员&#…

K8S使用教程(详细)

Kubernetes详细教程 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点…

零基础学kubernetes(k8s)必看教程,带你10分钟快速实战入门k8s

一、前言 作为一个工作十余年,拥有比较丰富的计算机网络运维、主机运维、云计算平台运维、自动化运维开发经验的老鸟,我来说说我当初刚接触Kubernetes时的一些感受以及学习技巧。 刚开始学习k8s时,我觉得挺难的,一头雾水&#x…

python input函数换行_python input函数换行_python_input函数

Python raw_input() 函数 Python内置函数 python raw_input()用来获取控制台的输入。 raw_input()将所有输入作为字符串看待,返回字符串类型。注意:input()和 raw_input()这两个函 Python input和print函数 - 箬笠蓑衣 258x256 - 5KB - PNG python row函数_row函数_python row_…

Python基础之input函数和eval函数

Python基础之&#xff08;二&#xff09; 一、 input()函数-数据输入 input()函数的功能&#xff1a;显示用户输入的值 input()函数可以包含一些提示性文字 通过使用input()函数&#xff0c;可以使用户主动输入的内容变成程序中的字符串变量的值 <字符串变量> input(&l…

函数input()讲解

目录 上次我们讲解了函数print&#xff0c;今天我们来讲它的“好兄弟”input&#xff01; 讲解 1.input与变量 2.input与提示语 3.input与print 例子 上次我们讲解了函数print&#xff0c;今天我们来讲它的“好兄弟”input&#xff01; 讲解 1.input与变量 input在pyth…

Python input函数

input()函数 import timeprint(亲爱的同学&#xff1a;) time.sleep(1)print(我们愉快地通知您&#xff0c;您已获准在霍格沃茨魔法学校就读。) time.sleep(2)print(随信附上所需书籍及装备一览。) time.sleep(1)print(学期定于九月一日开始。) time.sleep(1)print(鉴于您对魔…

python中input函数最简单详细的了解

一、input&#xff08;&#xff09;函数 有了 输入 魔法&#xff0c;程序就有了对话的功能。计算机根据你的回答进行对应的处理&#xff0c;好像能听懂你的话一样。 你通过 Python 代码向计算机提供指令&#xff0c;计算机执行指令&#xff0c;然后通过 input() 函数把问题显…

input函数和int函数的使用

第一&#xff0c;input函数接受一个标准输入数据&#xff0c;返回str类型 第二&#xff0c;int函数可以把str强制转换为整形 第三&#xff0c;int(input()) ps&#xff1a;最近搞深度学习的视频&#xff0c;但是依然需要实操

python中input函数的使用

input() 函数接受一个标准输入数据&#xff0c;返回为 string 类型。 input() # 单个输入使用input ninput() print(n) print(type(n))ninput("输入&#xff1a;") print(n) print(type(n))ninput() print(n) print(type(n))input().split() split()方法通过指定分…

python编程 input输入函数

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.输入与输出 1.input输入函数 2注意点① 3注意点② 二.input输入函…

Python中的input()函数

选择题 请问在Python 3.x中&#xff0c;从键盘输入数字2之后&#xff0c;下列代码的输出结果是&#xff1f; a input("请输入年龄&#xff1a;") print(a 1) A a 1 B 2 1 C 3 D 抛出异常 问题解析 1.在Python中&#xff0c;使用内置函数input()可以接收用户的键盘…

Python基础 input函数

输入函数input&#xff08;&#xff09; 作用&#xff1a;接收来自用户的输入 返回值类型&#xff1a;输入值的类型为str 值的存储&#xff1a;使用 对输入的值进行存储 input函数的基本使用 present input (你想要什么礼物呢&#xff1f;) present --> 变量 --> …

php中input函数,input函数的用法是什么?

input函数的用法是什么? input函数的用法是: 1.input()函数 在Python3中,input()函数接受一个标准输入数据,返回为string类型。 注意:在Python3中,raw_input()和input()进行了整合,去除了raw_input(),仅保留了input()函数,其接收任意任性输入。将所有输入默认为字符串处…

【Python】input()函数用法小结

一&#xff1a;input&#xff08;&#xff09;函数的输入机制 我们编写的大部分程序&#xff0c;都需要读取输入并对其进行处理&#xff0c;而基本的输入操作是从键盘键入数据。Python从键盘键入数据&#xff0c;大多使用其内置的input&#xff08;&#xff09;函数。但是&…

python中input函数使用

1、input函数作用&#xff1a; 接收来自用户的输入 2、返回值类型 输入值的类型为str 3、值的存储 使用对输入的值进行存储 例&#xff1a; presentinput(‘大圣想要什么礼物呢?’) print (present) 运行之后会出现&#xff1a;大圣想要什么礼物呢?&#xff0c;我们给…

input()函数及其各种用法

都知道C语言利用scanf()输入&#xff0c;C利用cin输入&#xff0c;且它们都会遇到空格和换行会自动停止&#xff1b;但python里面的input()输入就比较特别点了&#xff0c;在输入的时候只以换行结束&#xff0c;也会许多注意点和规范。 Ⅰ. input()函数的基本使用&#xff1a;…

python中input()函数详解

1.input&#xff08;&#xff09;函数赋值后数据在python内部的类型。 if __name__"__main__":ainput()print(type(a))binput()print(type(b))cabprint(c)print(type(c))输入及输出&#xff1a; 从结果可以看出&#xff0c;我们通过input输入的数据在python中被默认…

python的input函数用法

目录 1.input的语法及用法 &#xff08;1&#xff09;语法&#xff1a;input() &#xff08;2&#xff09;用法&#xff1a;运行代码之后可自定义输入目标数据&#xff0c;返回结果为str&#xff08;字符串&#xff09;类型。 2.实例 &#xff08;1&#xff09;简单用法&a…