1. K8s是个什么东西?解决了什么核心问题?相比docker有什么核心优势?
k8s源于google内部的一个集群管理系统,它是用来管理集群的。比例,一个大型的电商系统,在微服务架构模式下,一个集群中可能有上万个进程在跑,那么怎么去部署,监控,保持稳定性是极其复杂的事,如果完全靠运维人工处理,是非常难的,必须借助一些自动化的管理手段。而k8s就是这样的工具,让复杂的运维工作变得简单,开发也可以完成。docker是容器技术,核心作用是做资源的隔离,如cpu,内存,磁盘,使得一个宿主机上可以运行多个进程,并且进程间不相互影响。
关键词:
k8s:集群管理,自动化,节约运维陈本
docker:容器技术,资源隔离
2. K8s的架构是怎样的?核心组件有哪些?解决了什么核心问题?
图片来源:https://medium.com/@keshiha/k8s-architecture-bb6964767c12
Master Node:集群管理节点
API Server:流量入口
controller Manager: 监控和维护节点和容器状态,实现如故障检查,服务迁移,容器伸缩
kube Scheduler: 负责容器编排,比如调度pod到合适的节点上工作
etcd: 分布式的存储组件
Worker Node:工作节点
kubelet: 节点与外部通信的入口
kube Proxy: 节点的网络组件,负责网络通信相关的事项
container-runtime: 比如说docker,当然也可以是其它的容器
3. 常见的微服务集群在k8s上的架构设计是如何的?
由上图可知,k8s中有几个核心的对象,去支持微服务架构。
ingress 对象: 存储路由转发规则
ingress controller:独立的pod,根据ingress中的转发规则实现路由转发(可实现7层网络协议的路由转发)
service:实现负载均衡的关键设计,使用类似iptables的方式,将请求均匀的分配到下游的pod中
depolyment: 实现高可用的对象,depolyment中可以指定pod的副本数,并会对其监控,保证有指定数量的pod在运行
pod:可以理解成容器,可以在指定的资源下,运行进程
蓝绿环境下k8s架构图
这里的架构会复杂一些,k8s的上游多了一个反向代理。之所以这么做,是因为ingress不支持流量从一个ingress转到另一个ingress,且没有跨namespace的转发。
4. 作为研发学习k8s有什么用处?可以解决哪些实际的问题?
有了k8之后,运维工作之后变的简单很多。作为研发不可避免的需要做一些运维工作。
常见的问题:pod服务异常(cpu过高,jvm内存过高,pod内存过高,pod反复重启)
5. docker和k8s中的一些常见指令
############################### docker中的指令 ###############################
docker ps -- 查看容器进程
docker ps -a -- 查看运行过的容器
docker info -- 查看容器信息
docker images -- 查看容器镜像
docker run xx -- 运行xx镜像
docker run -it xx sh --运行镜像,进入容器内存 运行shell
ctrl + D --从容器中退出
docker stop containerId --停止容器运行
docker run -d nginx:alpine -- -d 表示后台运行
docker exec -it containerId/containerName sh 进入后台并执行shell
docker rm 容器id前缀 -- 删除容器
docker rmi -- 删除镜像
docker start 容器id -- stop后的容器,可以通过这种方式重新启动############################### k8s中的指令 ###############################
minikube status 查看集群状态
kubectl get node 查看节点信息
minikube ssh 登入节点
sudo minikube start --force --kubernetes-version=v1.28.3
kubectl get pod -n kube-system 查看节点中的组件状态
kubectl apply -f ngx-pod.yml -- 使用yaml文件 申明式的启动pod
kubectl delete -f ngx-pod.yml -- 使用yaml文件 删除pod
kubectl delete pods <pod> -- 删除pod
kubectl logs echo-job-f59c2 -- 查看pod中的日志(echo输出的)
kubectl port-forward wp-pod 8080:80 & -- 端口映射
kubectl run spring-demo --image=spring-demo:v1 --port=8087
参考文章:
k8s官网:服务(Service) | Kubernetes