• 第二章 Kuberbetes实践指南


    kubernetes安装与配置

    网络,安全,服务启动配置

    参考: kubernetes权威指南第二版

    kubectl命令行工具用法详解

    kubectl [command] [type] [name] [flag]

    command:子命令,用于操作资源对象如create delete describe get apply

    type:如pod  node

    name:资源对象名称

    flags:kubectl子命令的可选参数

    更多子命令参考资料

    flag参数

    kubectl命令输出格式

    如:kubectl get pods -n itsma1 -o=json

    kubectl操作示例

    1创建资源对象

    根据yaml配置文件一次性创建service和rc

    kubectl create -f my-service.yaml -f my-rc.yaml

    根据<directory>目录下所有.yaml  .yml .json文件的定义进行创建操作:

    kubectl create -f <directory>

    2查看资源对象

    查看所有Pod列表

    kubectl  get pods

    查看rc和service列表

    kubectl get rc,service

    3描述资源对象

    显示node的详细信息

    kubectl describe nodes <node-name>

     显示pod的详细信息

    kubectl describe pods/<pod-name>

    显示由RC管理的Pod的信息

    kubectl describe pods <rc-name>

    4 删除资源对象

    基于pod.yaml定义的名称删除Pod

    kubectl delete -f pod.yaml

    删除所有包含某个label的pod和service

    kubectl delete pod,services -l name = <label-name>

    删除所有pod:

    kubectl delete pods --all

    5 执行容器的命令

    执行pod的data命令,默认使用pod中的第1个容器执行:

    kubectl exec <pod-name> date

    指定pod中某个容器执行date命令:

    kubectl exec <pod-name> -c <container-name> date

    通过bash获得pod中某个容器的TTY,相当于登录容器:

    kubectl exec -ti <pod-name> -c <container-name> /bin/bash

    6查看容器日志

    查看容器输出到stdout的日志:

    kubectl logs <pod-name>

    跟踪查看容器的日志,相当于tail -f命令的结果:

    kubectl logs -f <pod-name> -c <container-name>

    深入掌握pod

    apiVersion: v1
    kind: Pod
    metadata:
      annotations: { ... }
      labels:                                
        deployment: docker-registry-1
        deploymentconfig: docker-registry
        docker-registry: default
      generateName: docker-registry-1-       
    spec:
      containers:                            
      - env:                                 
        - name: OPENSHIFT_CA_DATA
          value: ...
        - name: OPENSHIFT_CERT_DATA
          value: ...
        - name: OPENSHIFT_INSECURE
          value: "false"
        - name: OPENSHIFT_KEY_DATA
          value: ...
        - name: OPENSHIFT_MASTER
          value: https://master.example.com:8443
        image: openshift/origin-docker-registry:v0.6.2 
        imagePullPolicy: IfNotPresent
        name: registry
        ports:                              
        - containerPort: 5000
          protocol: TCP
        resources: {}
        securityContext: { ... }            
        volumeMounts:                       
        - mountPath: /registry
          name: registry-storage
        - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
          name: default-token-br6yz
          readOnly: true
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: default-dockercfg-at06w
      restartPolicy: Always
      serviceAccount: default               
      volumes:                              
      - emptyDir: {}
        name: registry-storage
      - name: default-token-br6yz
        secret:
          secretName: default-token-br6yz
    View Code

     

    创建pod

    kubectl reate -f  <yaml file>

    查看pod

      kubectl get pods  -n  <namespace>

    pod容器共享数据卷(volumn)

                      pod的yaml文件中定义如下:

    pod的配置管理(configmap)

     容器应用配置管理:1)生成为容器的环境变量

                               2)设置容器启动命令的启动参数

              3)configmap中的文件以volumn形式挂载到容器内部

    configmap的创建

      以yaml文件创建:

          

       kubectl命令创建:         

    #kubectl  create configmap NAME  --from-file=[key=]source   --from-file=[key=]source              key为文件名     value为文件内容
    
    列如: kubectl create configmap testConfigMap --from-file=test.txt
    
    #kubectl create configmap NAME --from-literal=key1=value1  --from-literal=key2=value2  
    
    列如: kubectl create configmap testConfigMap --from-literal=loglevel=debug  --from-literal=appdir=/var/bin

    将既有的configmap(cm-appvars)中的data设置pod环境变量:

    将configmap中的文件挂载到容器内部:

      pod定义:

    登录容器:
    #kubectl exec -ti cm-test-app --bash
         # cat /configfiles/server.xml

    pod生命周期和重启策略(RestartPolicy)

     pod健康检查:

      LivenessProbe探针:用于判断容器是否存活;

       ReadinessProbe:用于判断容器是否启动完成;

    玩转pod调度

     1 RC,Deployment:全自动调度

     2 NodeSelect:定向调度           pod指定node启动

     3 NodeAffinity:亲和度调度  替换NodeSelector的下一代调度策略

     4 job:批处理调度

    pod的扩容和缩容

    手动扩容  修改rc
    #kubectl scale rc redis-slave --replicas=3   
    
    基于cpu使用率自动扩容(HPA)
    在RC的yaml文件中:
    
    spec:
        containers:
         - name:php-apache
            image:gcr.io/google_containers/pha-example
            resources:
                request:
                   cpu:200m
    
    
    创建一个HPA控制器,在1-10之间调整pod副本数,使得平均pod cpu使用率维持在50%
    #kubectl autoscale rc php-apache --min=1 --max=10  --cpu-percent=50

    定义一个HPA yaml文件,并制定管理的RC:

    pod滚动升级

    定义一个新的RC,不同的label,不同的文件名,相同的namespace
    #kubectl rolling-update reds-master -f redis-master-controller-v2.yaml

    深入掌握Service

                  

    service基本用法:

     service被设计类似负载均衡器来实现请求的分发。

    创建service

    1. kubectl expose rc webapp

    2.kubectl create -f    *.yaml

    负载分发策略:

    集群外部访问Pod或service

    将容器应用的端口号映射到物理机上:

    设置hostnetwork=true,使得pod中所有容器映射到物理机的端口:

    将service端口号映射到物理机

    通过设置nodePort映射到物理机,同时设置Service的类型为Nodeport:

    DNS搭建指南

    kubenetes提供虚拟DNS服务名为skydns,由四个组件组成。

    1)etcd :DNS存储

    2)kube2sky:将kubernetes master中的service 注册到etcd里面

    3)skyDNS:提供DNS域名解析服务

    4)healthz:提供对skyDNS服务的健康检查功能

    Ingress Http 7层路由机制

  • 相关阅读:
    webService理解
    通过ajax.net调用webservice
    .net中调用webservice,post、get方式实现调用
    webservice加载异常
    http 的get,post方式访问url
    dorado
    dorado7中父窗体获取动态生成的iframe中的对象
    dorado中session
    最长公共子序列
    线性DP-数字三角形,最长上升子序列
  • 原文地址:https://www.cnblogs.com/gaojy/p/6835595.html
Copyright © 2020-2023  润新知