第二章 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层路由机制

 

posted @ 2017-09-21 16:45  gaojy  阅读(629)  评论(0编辑  收藏  举报