k8s由多个cluster组成,每个cluster长这样。
Kubernete cluster由control plane和node组成。
- control plane起调度的作用
- node主要干活
control plane有以下服务
- API server -- 接受外部请求,如kubectl发送的请求。
- Backing store -- a high-availability, distributed, and reliable key-value store called etcd,保持cluster的当前和期望状态等
- Scheduler -- 对node分配workload,监控新生成的container,再指定到node.
- Controller manager -- 启动及监视controller,而controller用于监视node/container/endpoing.
- Cloud controller manager -- 上云以后,使用云技术的controller manager。
node有以下服务
- Kubelet -- 接收API server发来的请求,监控本node的container干活。
- Kube-proxy -- 负责本node的网络,如提供ip地址,实现routing/load balancing by iptables/ipvs。
- Container runtime -- 通过Container Runtime Interface来管理container。
有一个pod的概念,一个pod可以容纳一组container,比如website+mongodb这样两个container。
pod以yaml文件的方式(pod template)定义,然后k8s去下载/生成container。
一个node可以有多个pod。
在ubuntu上练习k8s
- 安装MicroK8s(只支持一个cluster)。
- sudo snap install microk8s --classic
- 安装服务
- sudo microk8s.status --wait-ready -- 默认一个服务都没启动
- sudo microk8s.enable dns dashboard registry -- 启动3个服务
- 给microk8s.kubectl加个别名kubectl,方便以后使用
- sudo snap alias microk8s.kubectl kubectl
- 看一下有哪些node和服务
- sudo kubectl get nodes
- sudo kubectl get services -o wide
- sudo kubectl get services -o wide --all-namespaces
- 安装nginx
- sudo kubectl create deployment nginx --image=nginx -- 也可以通过文件的形式部署
- sudo kubectl get deployments -- 显示已部署情况
- sudo kubectl get pods -o wide -- 查看运行的pod, 可以运行wget 10.1.83.10测试
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 4m17s 10.1.83.10 microk8s-vm
- 扩容到3个pod
- sudo kubectl scale --replicas=3 deployments/nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 7m57s 10.1.83.10 microk8s-vm nginx-86c57db685-lzrwp 1/1 Running 0 9s 10.1.83.12 microk8s-vm nginx-86c57db685-m7vdd 1/1 Running 0 9s 10.1.83.11 microk8s-vm
- sudo kubectl scale --replicas=3 deployments/nginx
- 卸载
- sudo microk8s.disable dashboard dns registry
- sudo snap remove microk8s