zoukankan      html  css  js  c++  java
  • k8s基础

    1.各组件作用及部署

    Master组件:

    kube-apiserver:集群统一入口,各组件协调者,以HTTP API 提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给etcd存储

    kube-controller-manager:处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

    kube-scheduler:根据调度算法为新创建的Pod选择一个Node节点。

    Node组件:

    kubelet:是master在node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载卷、下载servret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。

    kube-proxy:在Node节点上实现Pod网络代理,维护网络规划和四层负载均衡工作

    自动化部署:参考  https://github.com/unixhot/salt-kubernetes

    2.使用pod管理容器

    docker pull nginx:1.13.12   ##从docker仓库拉取nginx镜像

    docker pull nginx:1.14.0     ##从docker仓库拉取nginx镜像

    docker login 192.168.56.11    ##登录harbor

    docker tag nginx:1.13.12 192.168.56.11/devopsedu/nginx:1.13.12   ##给镜像打标签

    docker push 192.168.56.11/devopsedu/nginx:1.13.12  ##把镜像推送到harbor上

    配置yaml不能用tab键,注意缩进

    -  表示列表

    :  key  value

    harbor秘钥配置

    cat /root/.docker/config.json |base64   #对harbor密码进行编码

    cat harbor-secret.yaml 内容如下:

    apiVersion: v1
    kind: Secret
    metadata:
      name: harbor-secret
      namespace: default
    data:
      .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjU2LjExIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0iCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJEb2NrZXItQ2xpZW50LzE4LjA5LjAgKGxpbnV4KSIKCX0KfQ==
    type: kubernetes.io/dockerconfigjson
    

    kubectl create -f harbor-secret.yaml   ##创建秘钥

    配置pod.yaml,内容如下:

    apiVersion: v1    #版本号
    kind: Pod     #Pod方法,资源对象类型
    metadata:        #元数据
      name: nginx-pod    #metadata.name Pod的名称
      labels:                   #自定义标签列表
        app: nginx
    spec:                        # Pod中容器的详细定义
      containers:              #容器列表
      - name: nginx         #容器名称
        image: 192.168.56.11/devopsedu/nginx:1.13.12   #容器镜像名称
        ports:                                      #容器需要暴露的端口列表
        - containerPort: 80
      imagePullSecrets:
        - name: harbor-secret               #引用harbor秘钥
    

    kubectl create -f nginx-pod.yaml   #创建pod  

    kubectl get pod   #获取pod

    kubectl get pod -o  wide   #获取pod详细信息

    kubectl  describe pod nginx-pod    #查看pod详细情况

    kubectl delete pod nginx-pod    #删除pod

    3.使用RC管理pod

    RC(Replication Contorller):监控pod,保证pod高可用,指定并管理副本

    rc.yaml配置如下

    cat nginx-rc.yaml

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: nginx-rc
    spec:
      replicas: 3
      selector:
        app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: 192.168.56.11/devopsedu/nginx:1.13.12
            ports:
            - containerPort: 80
          imagePullSecrets:
            - name: harbor-secret

    kubectl create -f nginx-rc.yaml   #创建rc

    kubectl get rc -o wide   ##获取rc

    kubectl describe rc   ##查看rc详细信息

    kubectl scale rc nginx-rc --replicas=4   #指定rc副本数量

    kubectl  rolling-update nginx-rc --image=192.168.56.11/devopsedu/nginx:1.14.0   #滚动升级容器

    使用RS和Deployment管理pod

    Deployment表示对k8s集群的一次性操作,比rs应用模式更广的api对象,对rs有做一层封装

    rs配置如下:

    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: nginx-rs
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: 192.168.56.11/devopsedu/nginx:1.13.12
            ports:
            - containerPort: 80
          imagePullSecrets:
            - name: harbor-secret

    cat nginx-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: 192.168.56.11/devopsedu/nginx:1.13.12
            ports:
            - containerPort: 80
          imagePullSecrets:
            - name: harbor-secret
    View Code

    kubectl create -f nginx-deployment.yaml --record   #创建并记录创建过程

    kubectl get deploy   #获取deployment

    kubectl get pod --show-labels    #查看pod标签

    kubectl set image deployment/nginx-deployment nginx=192.168.56.11/devopsedu/nginx:1.14.0   #更新镜像

    kubectl rollout history deployment/nginx-deployment   #查看版本更详细历史

    kubectl rollout history deployment/nginx-deployment --revision=1   #查看第一个版本的执行明细

    kubectl rollout undo deployment/nginx-deployment   ##回滚到上一版本

    kubectl rollout undo deployment/nginx-deployment --to-revision=2    ##回滚到指定版本

    kubectl scale deployment nginx-deployment --replicas 5   ##扩容

    kubectl scale deployment nginx-deployment --replicas 2   ##缩容

    DaemonSet管理pod和node Labels

    Daemonset确保每个node运行一个pod副本,当有集群增加或减少时,也会增加或减少pod副本

    yaml配置:

     1 apiVersion: apps/v1
     2 kind: DaemonSet
     3 metadata:
     4   name: nginx-daemonset
     5   labels:
     6     app: nginx
     7 spec:
     8   selector:
     9     matchLabels:
    10       app: nginx
    11   template:
    12     metadata:
    13       labels:
    14         app: nginx
    15     spec:
    16       containers:
    17       - name: nginx
    18         image: nginx:1.13.12
    19         ports:
    20         - containerPort: 80

    当需要指定node是,添加

    nodeSelector:
      disktype: ssd

    和containers同级。

    kubectl create -f daemonset nginx-daemonset.yaml   ##创建daemonset

    Node Selector操作:使pod运行在指定的node上

    kubectl label nodes 192.168.56.13 disktype=ssd   #先给指定node打标签

    kubectl get nodes --show-labels   #查看node标签

    service管理pod访问

    ip是固定的

    kind: Service
    apiVersion: v1
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80

    kubectl create -f nginx-service.yaml

    kubectl get service

    kubectl apply -f nginx-service.yaml   ##重新应用(加载)

    通常情况下,deployment和service一块创建,配置如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: 192.168.56.11/devopsedu/nginx:1.13.12
            ports:
            - containerPort: 80
          imagePullSecrets:
            - name: harbor-secret
    
    
    
    
    kind: Service
    apiVersion: v1
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
      - name: http
        protocol: TCP
        port: 80
        targetPort: 80
      - name: https
        protocol: TCP
        port: 443
        targetPort: 80

    在下面跟ports同级加上type: NodePort  就能通过node + IP:端口访问了。 http://192.168.56.12:20046

     使用Traefik实现Ingress

    service只能实现4层 ip+端口的形式访问,如果要实现7层的访问,就要用到ingress。

     kubectl label nodes 192.168.56.12 edgenode=true   #打标签

    kubectl get nodes --show-lables  ##获取标签

    kubectl create -f /srv/addons/ingress/   #创建traefik

    ingress目录配置如下:

     1 #cat daemonset.yml 
     2 apiVersion: extensions/v1beta1
     3 kind: DaemonSet
     4 metadata:
     5   name: traefik-ingress-lb
     6   namespace: kube-system
     7   labels:
     8     k8s-app: traefik-ingress-lb
     9 spec:
    10   template:
    11     metadata:
    12       labels:
    13         k8s-app: traefik-ingress-lb
    14         name: traefik-ingress-lb
    15     spec:
    16       terminationGracePeriodSeconds: 60
    17       hostNetwork: true
    18       restartPolicy: Always
    19       serviceAccountName: ingress
    20       containers:
    21       - image: traefik:v1.6
    22         name: traefik-ingress-lb
    23         resources:
    24           limits:
    25             cpu: 200m
    26             memory: 80Mi
    27           requests:
    28             cpu: 100m
    29             memory: 50Mi
    30         ports:
    31         - name: http
    32           containerPort: 80
    33           hostPort: 80
    34         - name: admin
    35           containerPort: 8580
    36           hostPort: 8580
    37         args:
    38         - --web
    39         - --web.address=:8580
    40         - --kubernetes
    41       nodeSelector:
    42         edgenode: "true"
    43 
    44 #cat ingress-rbac.yml 
    45 apiVersion: v1
    46 kind: ServiceAccount
    47 metadata:
    48   name: ingress
    49   namespace: kube-system
    50 
    51 ---
    52 
    53 kind: ClusterRoleBinding
    54 apiVersion: rbac.authorization.k8s.io/v1beta1
    55 metadata:
    56   name: ingress
    57 subjects:
    58   - kind: ServiceAccount
    59     name: ingress
    60     namespace: kube-system
    61 roleRef:
    62   kind: ClusterRole
    63   name: cluster-admin
    64   apiGroup: rbac.authorization.k8s.io
    65 
    66 #cat traefik-ui.yml 
    67 apiVersion: v1
    68 kind: Service
    69 metadata:
    70   name: traefik-web-ui
    71   namespace: kube-system
    72 spec:
    73   selector:
    74     k8s-app: traefik-ingress-lb
    75   ports:
    76   - name: web
    77     port: 80
    78     targetPort: 8580
    79 ---
    80 apiVersion: extensions/v1beta1
    81 kind: Ingress
    82 metadata:
    83   name: traefik-web-ui
    84   namespace: kube-system
    85 spec:
    86   rules:
    87   - host: traefik-ui.local
    88     http:
    89       paths:
    90       - path: /
    91         backend:
    92           serviceName: traefik-web-ui
    93           servicePort: web
    View Code

    kubectl create -f nginx-ingress.yaml  #创建ingress

    nginx-ingress.yaml配置如下:

     1 apiVersion: extensions/v1beta1
     2 kind: Ingress
     3 metadata:
     4   name: nginx-ingress
     5 spec:
     6   rules:
     7   - host: www.example.com
     8     http:
     9       paths:
    10       - path: /
    11         backend:
    12           serviceName: nginx-service
    13           servicePort: 80

    绑定hosts,访问www.example.com即可。 

  • 相关阅读:
    [转]Design Time Serialization
    啥都不说了,不枉熬油点灯了
    Eclips汉化
    FreeBSD 上用上苹果黑体,效果很棒
    使用Portupgrade
    fvwm2rc
    make.conf 配置优化
    基于FreeBSD5.4全能服务器安装(dns,ftp,apache,qmail)
    portssupfile
    关于FreeBSD 5优化的补充
  • 原文地址:https://www.cnblogs.com/liumj0305/p/10381749.html
Copyright © 2011-2022 走看看