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