本文的例子是在3台机器node1(master) node2(worker) node3(worker)上面部署nginx(3个副本)

一、K8s Deployments介绍及创建

简介 

为了实现在Kubernetes集群上部署容器化应用程序。

需要创建一个Kubernetes Deployment,Deployment负责创建和更新应用。

创建Deployment后,Kubernetes master 会将Deployment创建好的应用实例调度到集群中的各个节点。

应用实例创建完成后,Kubernetes Deployment Controller会持续监视这些实例。

如果管理实例的节点被关闭或删除,那么 Deployment Controller将会替换它们,实现自我修复能力。

创建步骤

通过以下命令生成该yaml文档然后修改

cd /app/k8s

kubectl create deployment nginx-deployment --image=nginx:1.15.4 --dry-run -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx-deployment  #标签名称
  name: nginx-deployment   #创建名为nginx-deployment的Deployment
spec:
  replicas: 1  #pod副本期待数量
  selector:
    matchLabels:
      app: nginx-deployment
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-deployment
    spec:
      containers:  #pod容器的定义部分
      - image: nginx:1.15.4   #容器镜像
        name: nginx     #容器名称
        ports:          
        - containerPort: 80   #容器应用监控的端口号
        resources:
          requests:
            cpu: 1           #指定cpu数量
            memory: 500Mi    #指定内存数量
          limits:
            cpu: 2
            memory: 1024Mi
        resources: {}
status: {}

自己创建一个文件叫nginx-deployment.yaml 然后把这个贴进去,把副本数改成3

selector字段表示:Deployment如何查找要管理的Pods。在这种情况下只需要在Pod模板(app:nginx)中定义的标签。

注意:`matchLabels` 字段是 {key,value} 的映射。单个 {key,value}在 `matchLabels` 映射中的值等效于 `matchExpressions` 的元素,其键字段是“key”,运算符为“In”,值数组仅包含“value”。所有要求,从 `matchLabels` 和 `matchExpressions`,必须满足才能匹配。

通过运行以下命令创建Deployment

kubectl apply -f nginx-deployment.yaml

注意:将kubectl的 —record 的flag设置为 true可以在annotation中记录当前命令创建或者升级了该资源。这在未来会很有用,例如,查看在每个Deployment revision中执行了哪些命令。

检查 Deployment 是否已创建。

kubectl get deployments

 查看 Pods

kubectl get pod -o wide

 想查看更多信息,可以 describe 这个 Pod

kubectl describe pod nginx-deployment-8b9576df-kwkdh

二、Services介绍及创建

简介

Pod是有生命周期的。当一个工作节点(Node)销毁时,节点上运行的Pod也会销毁,然后通过ReplicationController动态创建新的Pods来保持应用的运行。

也就是说,Kubernetes集群中的每个Pod都有一个独立的IP地址,甚至是同一个节点上的Pod,因此需要有一种方式来自动协调各个Pod之间的变化,以便应用能够持续运行。

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

可以通过type在ServiceSpec中指定一个需要的类型的Service类型

Service的四种type:

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

 创建步骤

编写service的yml文件

cd /app/k8s

vi nginx-service.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service   #自定义service 名称
  labels:
    app: nginx-service  #自定义标签名称
spec:
  type: NodePort
  selector:
    app: nginx-deployment
  ports:
  - port: 8000
    targetPort: 80      #nginx 服务默认端口号
    nodePort: 32500     #客户端直接访问的端口号

创建service

kubectl create -f nginx-service.yml 

查看service

kubectl get svc 

网页验证:

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐