K8S 使用deployment 部署nginx

网友投稿 336 2022-10-28

K8S 使用deployment 部署nginx

实验环境

1.centos 7.4 系统2.已经安装docker,部署k8s群集3.关闭防火墙4.可连接外网

K8s Deployments 介绍

为了实现在Kubernetes集群上部署容器化应用程序。需要创建一个Kubernetes Deployment,Deployment负责创建和更新应用。创建Deployment后,Kubernetes master 会将Deployment创建好的应用实例调度到集群中的各个节点。

应用实例创建完成后,Kubernetes Deployment Controller会持续监视这些实例。如果管理实例的节点被关闭或删除,那么 Deployment Controller将会替换它们,实现自我修复能力。

“在旧的世界中” ,一般通常安装脚本来启动应用,但是便不会在机器故障后自动恢复。通过在Node节点上运行创建好的应用实例,使 Kubernetes Deployment 对应用管理提供了截然不同的方法。

先安装k8s群集

可参考博客 :nginx-deployment.yml

kind: Deployment metadata: name: nginx-deploy spec: replicas: 1 template: metadata: labels: app: nginx-cluster spec: containers: - name: nginx-cluster image: nginx ports: - containerPort: 80 resources: requests: cpu: 1 memory: 500Mi limits: cpu: 2 memory: 1024Mi

解释如下:

kind: Deployment metadata:name: nginx-deployspec:replicas: 1 #pod副本期待数量template: #根据此模板创建pod的副本(实例)metadata:labels:app: nginx-cluster #标签名称spec:containers: #pod容器的定义部分- name: nginx-cluster #容器名称image: nginx #容器镜像ports:- containerPort: 80 #容器应用监控的端口号resources:requests:cpu: 1 #指定cpu数量memory: 500Mi #指定内存数量limits:cpu: 2 memory: 1024Mi

创建deployment

kubectl create -f nginx-deploy.yml #创建deploymentkubectl get deployment #查看deploymentkubectl get pod -o wide #查看pod状态

K8s Services概述

Pod是有生命周期的。当一个工作节点(Node)销毁时,节点上运行的Pod也会销毁,然后通过ReplicationController动态创建新的Pods来保持应用的运行。作为另一个例子,考虑一个图片处理 backend,它运行了3个副本,这些副本是可互换的 —— 前端不需要关心它们调用了哪个 backend 副本。也就是说,Kubernetes集群中的每个Pod都有一个独立的IP地址,甚至是同一个节点上的Pod,因此需要有一种方式来自动协调各个Pod之间的变化,以便应用能够持续运行。

Enter Services。Kubernetes中的Service 是一个抽象的概念,它定义了Pod的逻辑分组和一种可以访问它们的策略,这组Pod能被Service访问,使用YAML (优先)或JSON 来定义Service,Service所针对的一组Pod通常由LabelSelector实现(参见下文,为什么可能需要没有 selector 的 Service)。

可以通过type在ServiceSpec中指定一个需要的类型的 Service,Service的四种type: ClusterIP(默认) - 在集群中内部IP上暴露服务。此类型使Service只能从群集中访问。NodePort - 通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 :,可以从集群的外部访问一个 NodePort 服务。LoadBalancer - 使用云提供商的负载均衡器(如果支持),可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务。ExternalName - 通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容,没有任何类型代理被创建。这种类型需要v1.7版本或更高版本kube-dnsc才支持。

如上图,A中Service 路由一组Pods的流量。Service允许pod在Kubernetes中被销毁并复制pod而不影响应用。相关Pod之间的发现和路由(如应用中的前端和后端组件)由Kubernetes Services处理。 Service 使用label selectors来匹配一组Pod,允许对Kubernetes中的对象进行逻辑运算,Label以key/value 键/值对附加到对象上。以多种方式使用: 指定用于开发,测试和生产的对象嵌入版本Label使用Label分类对象你可以在使用--exposekubectl 创建 Deployment 的同时创建 Service 。

编写service

vim nginx-service.yml

apiVersion: v1 kind: Service metadata: name: nginx-service labels: app: nginx-service spec: type: NodePort selector: app: nginx-cluster ports: - port: 8000 targetPort: 80 nodePort: 32500

解释如下:

apiVersion: v1 #版本号kind: Service #表明是k8s servicemetadata:name: nginx-service #自定义service 名称labels:app: nginx-service #自定义标签名称spec:type: NodePort selector:app: nginx-clusterports:- port: 8000 targetPort: 80 #nginx 服务默认端口号nodePort: 32500 #客户端直接访问的端口号

创建service

kubectl create -f nginx-service.yml #创建servicekubectl get svc #查看service

网页验证

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:aigo国民好物USSD固态U盘U393简评:双接口设计更实用
下一篇:三种Java自定义DNS解析器方法与实践
相关文章

 发表评论

暂时没有评论,来抢沙发吧~