MASTER:
APIserver:是k8s集群的一个前端接口,各种客户端工具以及K8s其他组件可以通过它管理我们的k8s集群。
scheduler(调度):负责决定将Pod放在哪个Node上运行
controller-manager:负责管理cluster的各种资源,保证资源处于预期的状态。deployment,daemonset。
ETCD:负责保存k8s配置信息和各种资源的状态信息。
flannel:网络(只要能实现docker跨主机访问的解决方案都可以)
NODE:
kubelet:是node节点的agent(代理)
当Scheduler确定在某个Node上运行Pod后,会将Pod的具体信息发送给该节点的Kubelet。kubelet会根据这些信息创建和运行容器,并向Master报告运行状态
kube-proxy:它用来决定访问service的流量转发到后端的哪个pod。如果后端有多个副本,kube-proxy会实现负载均衡。
k8s组件的工作流程:
1)kubectl发送部署请求到APIserver
2)APIserver通知controller manager创建一个deployment资源。
3)scheduler执行调度任务,将副本Pod发送到node01和node01
4)node01和node02上的kubectl在各自的节点上创建并运行pod
注意:
1)应用的配置和当前状态信息会保存在etcd中
2)flannel会为每个pod分配IP。如果有创建service,kube-proxy会提供负载均衡。
创建一个deployment:kubectl run httpd-app --image=httpd --replicas=2
查看资源类型:kubectl get deployment
查看详细:kubectl get pods
kubectl get pods -o wide
查看某个资源详细信息:kubectl describe pod httpd-app-5bc589d9f7-f5t88
删除deployment:kubectl delete deployments heepd-app
删除一个pod:
暴露服务:kubectl expose deployment nginx-deploy --name=myweb --port=80 --type=NodePort
kubectl expose deployment nginx-deploy --name=myweb --port=8080 --target-port=80 --type=NodePort(将容器的80端口发布的cluster的8080端口)
查看服务:kubectl get service (缩写svc也行)
扩容:kubectl scale deployment nginx-deploy --replicas=2
缩容:改–replicas=2 的数字就行
以yaml格式查看:kubectl get deployments. -o nginx-deploy -o yaml
以json格式查看:kubectl get deployments. -o nginx-deploy -o json
升级:kubectl set image deployment nginx-deploy nginx-deploy=nginx:1.15
回滚:kubectl rollout undo deployment nginx-deploy(只能回滚到上一个版本)
k8s常用命令总结:
kubectl run :创建一个deployment或job来管理创建的容器。
kubectl get :显示一个或多个资源,默认查看当前名称空间的资源。-n +指定名称空间
kubectl expose :把一个资源暴露为一个新的service资源
kubectl describe :显示特定资源的详细信息
kubectl scale :可以对Deployment等资源指定一个新的replicas的值
kubectl set :更改现有的应用程序的资源
kubectl rollout :资源的回滚