目录
文章目录
一、k8s
1、pod
容器组就是pod
创建工作负载就是创建镜像,创建服务service就是创建容器组(pod)
一个pod可以包含多个service容器,好处是组内服务网络互通,访问不同服务就像访问本地服务一样。
一个pod内很多东西都是共享的,比如pvc(存储卷)、configmap(配置字典)、secret(保密字典)
2、kubectl相关的pods命令
命令 | 功能 |
---|---|
kebectl get namespaces | 获取所有namespaces查看所有项目 |
kubectl get pods -A | 查看所有pod(容器组) |
kubectl run nginx --image=nginx --namespace=mxshop | 将nginx镜像部署到mxshop项目下,成为nginx容器组。注意这里删除容器组不会重建,因为没有部署工作负载 |
kubectl get pods --namespace=mxshop -l “app=user-service” | 获取标签“lable” 为user-service的pod。这个app=uesr-service是在添加工作负载最后一步“添加元数据”设置的 |
kubecl logs --namespace=mxshop -l “app=user-service” | 查看指定pod的日志 |
kubectl get pods --namespace=mxshop -l “app=user-service” -o wide | 查看pods更多信息 |
pods相关命令 | pods更多相关命令 |
3、k8s的控制器-deployment
工作负载是容器组的控制器。
没有什么是加一层解决不了的问题,加一层控制器就可以解决上面无法管理容器组的问题
Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为
1、Deployment:适合无状态的服务部署,如user-service
2、StatefullSet:适合有状态的服务部署,如mysql服务
3、DaemonSet:一次部署,所有的node节点都会部署,例如一些典型的应用场景:
- 运行集群存储 daemon,例如在每个Node上运行 glusterd、ceph
- 在每个Node上运行日志收集 daemon,例如 fluentd、 logstash
- 在每个Node上运行监控 daemon,例如 Prometheus Node Exporter
4、Job:一次性的执行任务
5、Cronjob:周期性的执行任务
- deployment
a. 副本 replices 去设置启动多少个实例
b. spec:设置容器相关的信息:如从哪个镜像来,cpu设置多少,端口映射,数据挂载
c. 更新策略
1)我升级版本啦,如果我停掉之前的版本,然后上线新的版本,有一段时间服务不可用,
2)采用滚动更新可以不用停止服务(先使用旧服务,当新服务启动好,让旧服务下线,使用新服务) - 如何获取某个pod的deployment
kubectl get deployment --namespace=mxshop -l “app=user-service” -o yaml > ./user-service.yaml
将yaml输出成user-service.yaml,让后cat user-service.yaml即可 - 官方文档
如何使用命令部署工作负载,查看官方文档->概念->工作负载->工作负载资源->Deployment
官方文档
4、Service
主要用来做负载均衡的,目前k8s只支持http短连接
对grpc请求,仍需本地做一个picker,k8s的service以后将会支持grpc负载均衡
由service创建的node-port类似pod
命令 | 解释 |
---|---|
kubectl apply 。。。 | 应用yaml配置,创建service,具体看文档 |
kubectl get services --namespace=mxshop -l “app=user-service-nodeport” | 列出指定service |
kubectl patch 。。。 | 更新某个字段 |
其他命令对照pod即可
5、ingress
ingress主要用来对外访问的,ingress屏蔽虚拟ip,以域名的方式访问
ingress功能:统一各服务域名,由路径区别具体服务
6、持久卷(pvc)
存储卷文档
主要用以下几个
1.hostpath
2.local
3.nfs
4.cephfs
7、configmap\secret
configmap
configmap即配置文件;和密码/秘钥相关的要保存到保密字典(secret)
有哪些要配置secret?
如:
8、架构图
模块 | 功能 |
---|---|
实体机 | 对应node |
api-server | 负责接收网络请求 |
controller manager | 负责决定将各类服务部署到哪个node |
etcd | 负责存储服务部署关系等集群信息 |
secheduler | 负责调度,如定时任务\某个容器再启动一次 |
主节点 | 负责将服务或请求分发到不同节点 |
kubelet | 负责具体创建pod部署服务.kubelet负责node上所有pod的生命周期,如pod启动\暂停\删除 |
kube-proxy | 负责网络,请求分发. 各node网络互通,kube-proxy会将请求转发到目的node |
9、总结
三个阶段
go基础知识讲解 - 第一个阶段
微服务阶段 - 第二个阶段 (知识面)
单体应用开发, gin
从0开始讲解,自己集成的, 规范性,
先运行起来,然后再深入
负载均衡, 限流熔断(负载均衡算法原理、熔断限流的原理) - 建议大家去看一下网上的资料深入一下算法
全面: 商品系统, 订单系统
商品系统,订单系统(很复杂的系统): 深入的地方
面试的时候都会很容易通关的, 订单系统(分布式事务-并发要求肯定就没有商品系统)
商品系统强调不是事务,并发,
抢购 - 订单系统并发上升到一个数量级
规范性、工程化 : 第三个阶段(深入知识点、规范化、k8s)
gmicro框架, 微服务框架,不强调spring - 没有必要:云原生之后, 都进入到istio、k8s
k8s部署
- 深入学习go的基础
- lock锁原理、channel原理、gmp原理、context原理、gc原理
- 组件:
- 负载均衡算法
- 熔断限流 算法
- mysql: 隔离级别-mvcc, 索引调优
- redis:redis-cluster原理, 缓存架构、瓶颈: 10G 为什么?
- 分布式系统架构: es(lsm tree), rocketmq(kafka)
- k8s
- 架构:
- 支持高并发的商品系统
- 缓存系统
- 订单系统
- 抢购系统
- 订单系统
- 分布式id
- 能说清楚