zoukankan      html  css  js  c++  java
  • kubernetes 1.21 部署业务

    https://medium.com/containermind/a-beginners-guide-to-kubernetes-7e8ca56420b6
    https://www.freecodecamp.org/news/learn-kubernetes-in-under-3-hours-a-detailed-guide-to-orchestrating-containers-114ff420e882/
    https://devopscube.com/kubernetes-deployment-tutorial/

    一. 基本概念

    Pod 共享网络、存储和计算资源的容器化服务的集合
    
    Deployment & ReplicaSet
    Deployment 的作用是管理和控制 Pod 和 ReplicaSet,管控它们运行在用户期望的状态
    ReplicaSet 的作用就是管理和控制 Pod
    
    Service & Ingress
    Service 和 Ingress 负责管控 Pod 网络服务
    Service 主要负责 K8S 集群内部的网络拓扑
    Ingress 是整个 K8S 集群的接入层,复杂集群内外通讯 
    
    Namespace 
    K8S 集群内创建 namespace 来分隔资源和对象
    

    二. deployment yaml文件
    YAML由 apiVersion、Kind、metadata、spec 4个部分组成

    apiVersion

    # kubectl api-versions
    admissionregistration.k8s.io/v1
    apiextensions.k8s.io/v1
    apiregistration.k8s.io/v1
    apps/v1
    authentication.k8s.io/v1
    authorization.k8s.io/v1
    autoscaling/v1
    autoscaling/v2beta1
    autoscaling/v2beta2
    batch/v1
    batch/v1beta1
    certificates.k8s.io/v1
    coordination.k8s.io/v1
    crd.projectcalico.org/v1
    discovery.k8s.io/v1
    discovery.k8s.io/v1beta1
    events.k8s.io/v1
    events.k8s.io/v1beta1
    flowcontrol.apiserver.k8s.io/v1beta1
    networking.k8s.io/v1
    node.k8s.io/v1
    node.k8s.io/v1beta1
    policy/v1
    policy/v1beta1
    rbac.authorization.k8s.io/v1
    scheduling.k8s.io/v1
    storage.k8s.io/v1
    storage.k8s.io/v1beta1
    v1
    
    # kubectl api-resources
    

    kind

    componentstatuses
    configmaps
    daemonsets
    deployments
    events
    endpoints
    horizontalpodautoscalers
    ingress
    jobs
    limitranges
    namespaces
    nodes
    pods
    persistentvolumes
    persistentvolumeclaims
    resourcequotas
    replicasets
    replicationcontrollers
    serviceaccounts
    services
    

    Metadata
    labels 、name 、 namespace 、annotations

    metadata:
      name: resource-name    # deployment name
      namespace: deployment-demo
      labels:
        app: web
        platform: java
        release: 18.0
      annotations:
        monitoring: true
        prod: true
    

    Spec

    # Replicas 确保任一时间运行pod数量
    spec:
      replicas: 3
    
    # Selector 匹配标签的pod将被管理
    selector:
        matchLabels:
          app: nginx
    
    # Template 包含镜像、端口、环境变量、命令参数等信息,用于复用
    template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - image: nginx
              name: nginx
    

    三. 部署示例
    1. 建立namespace

    cat > /tmp/namespace.yaml << EOF
    apiVersion: v1
    kind: Namespace
    metadata:
      name: kube-demo
      labels:
        apps: web-based
      annotations:
        type: demo
    EOF
    
    # kubectl apply -f /tmp/namespace.yaml 
    namespace/kube-demo created
    
    # kubectl get namespaces -o wide
    NAME              STATUS   AGE
    default           Active   3h50m
    ingress-nginx     Active   3h6m
    kube-demo         Active   23s
    kube-node-lease   Active   3h50m
    kube-public       Active   3h50m
    kube-system       Active   3h50m
    metallb-system    Active   3h13m
    
    # kubectl describe namespaces kube-demo 
    Name:         kube-demo
    Labels:       apps=web-based
                  kubernetes.io/metadata.name=kube-demo
    Annotations:  type: demo
    Status:       Active
    
    No resource quota.
    
    No LimitRange resource.
    

    2. namespace指派资源

    cat > /tmp/resourceQuota.yaml << EOF
    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: mem-cpu-quota
      namespace: kube-demo
    spec:
      hard:
        requests.cpu: "4"
        requests.memory: 8Gi
        limits.cpu: "8"
        limits.memory: 16Gi
    EOF
    
    # kubectl apply -f /tmp/resourceQuota.yaml 
    resourcequota/mem-cpu-quota created
    
    # kubectl describe namespaces kube-demo 
    Name:         kube-demo
    Labels:       apps=web-based
                  kubernetes.io/metadata.name=kube-demo
    Annotations:  type: demo
    Status:       Active
    
    Resource Quotas
      Name:            mem-cpu-quota
      Resource         Used  Hard
      --------         ---   ---
      limits.cpu       0     8
      limits.memory    0     16Gi
      requests.cpu     0     4
      requests.memory  0     8Gi
    
    No LimitRange resource.
    

    3. 建立deployment

    cat > /tmp/deployment.yaml << EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
      namespace: kube-demo
      annotations:
        monitoring: "true"
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: 192.168.100.198:5000/nginx:1.21
            name: nginx
            tty: true
            stdin: true
            ports:
            - containerPort: 80
            resources:
              limits:
                memory: "2Gi"
                cpu: "1000m"
              requests: 
                memory: "1Gi"
                cpu: "500m"
    EOF
    
    # kubectl apply -f /tmp/deployment.yaml 
    deployment.apps/nginx created
    
    # kubectl describe namespaces kube-demo 
    Name:         kube-demo
    Labels:       apps=web-based
                  kubernetes.io/metadata.name=kube-demo
    Annotations:  type: demo
    Status:       Active
    
    Resource Quotas
      Name:            mem-cpu-quota
      Resource         Used   Hard
      --------         ---    ---
      limits.cpu       3      8
      limits.memory    6Gi    16Gi
      requests.cpu     1500m  4
      requests.memory  3Gi    8Gi
    
    No LimitRange resource.
    
    # kubectl get deployments -n kube-demo -o wide
    NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                            SELECTOR
    nginx   3/3     3            3           34s   nginx        192.168.100.198:5000/nginx:1.21   app=nginx
    
    # kubectl get pods -n kube-demo -o wide
    NAME                     READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES
    nginx-796bbc89ff-8jvhw   1/1     Running   0          51s   10.240.2.144   vm-197   <none>           <none>
    nginx-796bbc89ff-cftfh   1/1     Running   0          51s   10.240.2.143   vm-197   <none>           <none>
    nginx-796bbc89ff-qk59q   1/1     Running   0          51s   10.240.36.12   vm-207   <none>           <none>
    
    # kubectl get deployments -n kube-demo -o yaml
    

    https://kubernetes.io/docs/concepts/services-networking/connect-applications-service

    4. 使用service提供服务

    cat > /tmp/service.yaml << EOF
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx
      namespace: kube-demo
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: ClusterIP
    EOF
    
    # kubectl apply -f /tmp/service.yaml 
    service/nginx created
    
    # kubectl get services -o wide -n kube-demo
    NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
    nginx   ClusterIP   10.97.122.87   <none>        80/TCP    9s    app=nginx
    
    # kubectl get services -n kube-demo -o yaml
    
    type: NodePort
    
    # kubectl apply -f /tmp/service.yaml 
    service/nginx configured
    
    # kubectl get services -o wide -n kube-demo
    NAME    TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE    SELECTOR
    nginx   NodePort   10.97.122.87    <none>        80:31853/TCP   3h8m   app=nginx
    
    type: LoadBalancer
    
    # kubectl apply -f /tmp/service.yaml 
    service/nginx configured
    
    # kubectl get services -o wide -n kube-demo
    NAME    TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE    SELECTOR
    nginx   LoadBalancer   10.97.122.87    <pending>     80:31853/TCP   3h8m   app=nginx
    

    5. 测试

    curl -l http://10.97.122.87 
    
  • 相关阅读:
    Azure HPC Pack Cluster添加辅助节点
    Azure HPC Pack 辅助节点模板配置
    Azure HPC Pack配置管理系列(PART6)
    Windows HPC Pack 2012 R2配置
    Azure HPC Pack 节点提升成域控制器
    Azure HPC Pack VM 节点创建和配置
    Azure HPC Pack 部署必要条件准备
    Azure HPC Pack 基础拓扑概述
    Azure VM 性能计数器配置
    Maven私仓配置
  • 原文地址:https://www.cnblogs.com/liujitao79/p/15538838.html
Copyright © 2011-2022 走看看