k8s相关操作
- 部署tomcat
kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8 kubectl get pods -o wide # 获取tomcat信息
- 暴露nginx访问
# 8080是tomcat的端口,80是pod的端口,pod管理container kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort
- 动态扩容
kubectl scale --replicas=3 deployment tomcat6
- 删除pod和service
kubectl delete pod,service baz foo # 删除名为baz和foo的Pod和Service kubectl delete pods --all # 删除所有的pods
- kubectl 命令
kubectl [command] [TYPE] [NAME] -o=<output_format>Output format Description -o json 输出 JSON 格式的 API 对象 -o name 仅打印资源名称而不打印任何其他内容 -o wide 以纯文本格式输出,包含任何附加信息。对于 pod 包含节点名 -o yaml 输出 YAML 格式的 API 对象
k8s 执行流程
- 通过Kubectl提交一个创建RC的请求,请求通过API Server被写入到etcd中。
- Controller Manager 通过API Server的监听资源变化的接口,监听到此事件。
- 分析之后,发现当前节点中还没有对应的pod实例。
- 根据RC里的pod模板的定义生成一个pod对象,然后通过API Service写入到etcd。
- 这次写入事件,被Scheduler发现,它立即执行一个复杂的调度流程。为这个将要被创建的Pod选定一个Node,并通过API Server将这一结果写入到etcd中
- 目标Node上运行的kubelet进程通过API Server监测到这个将要被创建的Pod,根据其定义,将其创建出来。目标Node会负责该Pod管理,知道其生命周期结束。
- 通过Kubectl 提交一个映射到该pod的service的创建请求。
- Controller Manager通过Label标签查询到关联的pod实例,然后生成service的Endpoints信息,并通过API Server 写入到etcd中
- 所有node上运行的proxy进程通过API Server查询并监听server对象与其对应的endpoints信息,建立一个软连接方式的负载均衡器来实现Service访问到后端Pod的流量转发功能。
k8s网络模型
kubernetes的网络模型从内到外,由四部分组测:
- Pod内部容器所在的网络
- Pod所在的网络
- Pod和Service之间通信的网络
- 外界与Service之间的通信网络