[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

【简介】在Kubernetes上设置nginx并显示默认页面

你好。
[简介] 我是系统解决方案部门的一名基础设施 wasshoi 人员,写了很多文章。

我是一个真正的守护者,但这次我将写关于 Kubernetes 的文章。
那里有太多详细的介绍性文章,以至于我在写它们之前就感到沮丧,但我会尝试用自己的方式以易于理解的方式总结我所分解的内容。
粘糊糊的。

这次,我们将实际使用 Kubernetes 准备 nginx 并显示欢迎页面。

对于开发人员来说可能很少接触它,但是为了在使用 Kubernetes 创建的环境中最大化应用程序的性能,有必要设计一个在某种程度上与 Kubernetes 兼容的应用程序,所以这里是它的工作原理请使用本文作为入门的跳板!

什么是 Kubernetes?

这是文档:

Kubernetes 是一个可移植、可扩展的开源平台,用于促进声明式配置管理和自动化,以管理容器化工作负载和服务。 Kubernetes 拥有一个庞大且快速发展的生态系统,提供广泛的服务、支持和工具。
官方文档: https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/

由于我了解不多,所以会一步步解释,但首先,Kubernetes是一个容器编排工具(一个像导体一样管理很多容器的镜像),所以需要对容器的了解作为先决条件。

声明式配置管理和自动化

在 Kubernetes 中,如果您在称为清单文件的文件中描述(声明)“所需状态”,Pod(容器和卷的集合)将根据内容创建。
例如,如果您订购了“4 个容器”,然后出错并删除了一个容器,Kubernetes 将自动创建一个并添加一个容器。
Docker Compose等容器一旦创建就可以创建,但Kubernetes的不同之处在于它添加了上面提到的管理功能。

管理容器化工作负载和服务

如果你学过 Docker,你可能知道 Docker 在单台机器上运行容器。
另一方面,Kubernetes 管理多台机器上的容器。
在大规模应用的情况下,可能会链接多台机器来分配负载和功能,但这时候,你可以使用上面提到的清单文件,而无需在每台机器上逐一运行 docker run 。它会以良好的方式部署到每台机器上,因此在部署大规模服务时它是一个很好的资产。

优点

除了像 Docker 一样成为使用容器部署大规模服务时的事实上的标准之外
,它还可以包括配置文件进行交付,并且它使用副本集来控制版本和停止容器,还有几个优点,例如能够无需执行任何操作即可更新。
另一大优势是开源社区在全球范围内活跃。

Kubernetes 术语表

Kubernetes 具有许多独特的概念和术语。
由于这部分比较难记,我简单解释一下。
在这一点上,我希望您在阅读本文时能够理解,世界上确实存在这样的人。如果你使用它,即使你不喜欢它,你也会记住它。

主节点

这是我们指挥的部分。后面我们会看到,还有工作节点,主节点的作用就是指导这些工作节点。

诸如``kube-apierver(接收并处理我们发送的命令)''
``etcd(维护接收到的``所需状态''的数据库)''
``kube-scheduler(将 pod 分配给工作节点)''它是一个实现功能的群体。

工作节点

与主节点协同工作的区域,也是 Pod 实际放置的区域。

有诸如“kube-let(与 kube-schedule 交互)”和
“kube-proxy(有效处理网络)”

容器和卷(存储区域)的集合。
即使您不使用卷,Kubernetes 也会将 Pod 作为一个单元进行管理。

服务

它具有组织Pod的作用。
每个服务分配一个IP,当该IP被访问时,服务会负载均衡到其下的Pod。
这种负载平衡是针对每个工作节点的,因此多个工作节点之间的负载平衡超出了服务的范围。

副本集

我们解释过,当 Pod 停止或被删除时,Kubernetes 会自动将它们恢复到所需的数量,但为此我们需要管理 Pod 的数量。
副本集负责这种管理。

部署

它管理 Pod 的部署。
上面提到的“Pod”、“服务”、“副本集”都可以在manifest文件(yaml格式)中进行描述,但是其中,“Pod”和“副本集”往往被描述为包含在这个“manifest”文件中。部署”。
换句话说,创建Pod时,只要有“部署”的清单和“服务”的清单,它就可以工作。

关于环境

眼见为实,所以我希望您看一下清单文件,其中包含上一节中解释的术语。
但在此之前,我们需要一个 Kubernetes 执行环境来应用清单文件。
您可以使用各个云提供的 Kubernetes 服务(AWS 的 EKS、GCP 的 GKE、Azure 的 AKS、OCI 的 OKE、阿里云的 ACK 等),但第一次对于学术界的学习目的来说价格昂贵,我们推荐使用“Docker Desktop”自带的扩展功能。

设置起来很简单。
检查 Docker Desktop 的“设置”⇒“Kubernetes”⇒“启用 Kubernetes”。

您只需等待安装各种东西即可。这是最好的。
这就是开始学习 Kubernetes 所需的全部内容。

清单文件示例

现在,让我们看一下清单文件示例。
作为示例,我借用了
一个 yaml 文件,该文件描述了从文档中创建 nginx 的部署是这样的。

apiVersion:apps / v1种类:部署元数据:名称:nginx部署规范:选择器:matchLabels:应用程序:nginx副本:2模板:元数据:标签:应用程序:nginx规范:容器:-名称:nginx图像:nginx:1.14。 2个端口:-containerPort:80---apiVersion:v1种类:服务元数据:名称:nginx-service标签:app:nginx规范:类型:NodePort端口:-端口:8080targetPort:80nodePort:30080协议:TCP选择器:应用程序:nginx

用“---”分隔的上半部分是部署描述,下半部分是服务描述。
可以将它们写入单独的清单文件中并单独管理它们,但如果将它们写入同一个文件中,请像这样用连字符分隔资源。
上述各项的解释如下。

■“apiVersion”⇒ Kubernetes 资源有 API 版本,因此请编写适当的版本。
根据项目的不同,检查方法有点复杂,但对于部署和服务,请使用命令“kubectl api-resources | grep Deployment”和“kubectl api-resources | grep Services”,然后输入“在 APIVERSION 字段中,您可以看到它分别显示“v1”。

■“种类” ⇒ 描述资源的类型。在本例中,我们将创建一个部署和一个服务,因此名称分别为“部署”和“服务”。

■``元数据'' ⇒ 顾名思义,它是元数据。给你的资源贴上标签。
现在,只需记住“名称”和“标签”即可。

■“spec”⇒ 描述资源的内容。从属项目因资源而异。
[此部署包括以下内容: ]
选择器
由部署用来管理 Pod。 在该示例中,附有标签。我稍后会用它。

副本
指定副本集。上面的示例请求两个 Pod。

规格
Pod 规格。指定容器中使用的图像和端口。

[该服务包括以下内容: ]
类型
在此字段中,从多种类型中进行选择并指定服务如何与外界通信。
具体为
“ClusterIP(可与ClusterIP连接。用于内部通信,不允许外部访问)”、
“NodePort(可与worker节点IP连接)”、
“LoadBalancer(可与负载均衡器IP连接)”、
“ExternalName(用于从 Pod 进行外部连接的特殊设置)。

从外部访问时,我们基本上使用“LoadBalancer”,但由于这次它不是公共的,所以我们指定“NodePort”直接连接到工作节点。
(我觉得有一个叫Ingress的资源,它的功能是L7负载均衡器,可以作为SSL终端,经常被用来对外泄露,但这次我不会使用它,所以暂时放在一边。注意“LoadBalancer”也可以启用 SSL,但在云中创建时,根据供应商的不同,可能会因规格而不受支持。)
此外,“NodePort”不仅仅用于像这次一样的测试。 ,而且对于想要在 NodePort 基础上执行一些操作的情况也可以使用它。

ports
除了将协议设置为 TCP 之外,这里还定义了三个端口。
“port”是服务端口
“targetPort”是容器端口
“nodePort”是工作节点端口。
由于这次type指定了NodePort,所以会使用这个“nodePort”来访问nginx。

选择器
在此项中指定Pod中设置的标签。

创造资源

现在我们已经介绍了基础知识,让我们实际创建一个清单文件,运行它并创建资源。
顺便说一句,您可以为 Kubernetes 中使用的文件使用任何名称。
与 Dockerfile 和 docker-compose.yml 不同,您不必使用特定名称,因此可以使用易于管理的规则创建每个名称。

# 使用 vi 打开文件,粘贴示例源代码并保存,然后使用 kubectl 命令创建部署 vi example.yml kubectl apply -f example.yml

检查您的 Pod

$ kubectl get po -l app=nginx 名称就绪状态重新启动年龄 nginx-deployment-6595874d85-7mt97 1/1 运行 0 52s nginx-deployment-6595874d85-mds2z 1/1 运行 0 52s

可以看到已经创建了两个Pod,并且被标记为“Running”。
例如,更改 yml 文件中“副本”的数量也会增加或减少 Pod 的数量。

接下来,您可以使用以下命令检查服务

$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 26h nginx-service NodePort 10.106.92.238 8080:30080/TCP 21m

看起来nodePort和服务端口已经链接成功了,我们在浏览器中输入“http://localhost:30080/”来访问Pod。

是的,通常的欢迎页面出现了!

概括

由于这是一个“介绍性”指南,我只给出了基本的解释。
为了真正公开并提供服务,还需要进行其他调整,但我希望我们能够摆脱这种我们不理解的感觉。
我想先开始写一篇文章,请稍等一下。

非常感谢!

如果您觉得这篇文章有帮助,请点赞!
20
加载中...
20 票,平均:1.00 / 120
7,621
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

基础设施瓦舒伊人

隶属于系统解决方案部门。
我很喜欢它,每天都研究它,幸运的是,Beyond 捡到了它。
自从我开始考虑从眼镜换成隐形眼镜以来,已经九年了。