【简介】在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。
是的,通常的欢迎页面出现了!
概括
由于这是一个“介绍性”指南,我只给出了基本的解释。
为了真正公开并提供服务,还需要进行其他调整,但我希望我们能够摆脱这种我们不理解的感觉。
我想先开始写一篇文章,请稍等一下。
非常感谢!