• 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 
    
  • 相关阅读:
    第三节课 字符串拼接、格式化输出、深浅复制
    第四节课 集合、字典、运算符
    python-模块系列
    python正则表达式
    python第二天
    Python-第一天
    SQL SERVER 最近查询过的语句
    razor page 页面
    RAZOR显示表格数据
    邮件模板 C#
  • 原文地址:https://www.cnblogs.com/liujitao79/p/15538838.html
Copyright © 2020-2023  润新知