k8s常可能问的问题
k8s常可能问的问题 1、为什么要用k8s 自我修复、pod水平自动伸缩、密钥和配置管理动态对应用进行扩容、缩容 服务发现、负载均衡 1.1、自我修复 比如误删pod后会自动创建,用 kind: ReplicationController 1.2、pod水平自动伸缩 这个功能就是根据CPU的使用情况周期性的调整Pod的副本数量 解释:首先创建HPA kind: HorizontalPodAutoscaler 设定目标CPU使用率限额,比如限定一个pod的cpu使用率50%,当超过50%时候,自动伸缩算法就会再创建一个pod分担压力,让cpu处于50%一下状态 1.3、动态对应用进行扩容、缩容 首先查看最原始的副本数为1 扩展为50个 kubectl scale --replicas=50 deployment/nginx-app 收缩为30个 scale --replicas=30 deployment/nginx-app 滚动镜像 kubectl set image deployment/nginx-app nginx-app=nginx:1.9.1 回滚 查看版本历史 [root@localhost 101]# kubectl rollout history deployment/nginx-app deployment.extensions/nginx-app REVISION CHANGE-CAUSE 1 <none> 2 <none> 回滚到上一次的版本 [root@localhost 101]# kubectl rollout undo deployment/nginx-app deployment.extensions/nginx-app 查看回滚状态 [root@localhost 101]# kubectl rollout status deployment/nginx-app 1.4、服务发现 服务发现在微服务架构里,服务之间经常进行通信,服务发现就是解决不同服务之间通信的问题。比如一个nginx的pod,要访问一个mysql服务,就需要知道mysql服务的ip和port,获取ip和port的过程就是服务发现 service:服务,是一个虚拟概念,逻辑上代理后端pod。众所周知,pod生命周期短,状态不稳定,pod异常后新生成的pod ip会发生变化,之前pod的访问方式均不可达。通过service对pod做代理,service有固定的ip和port,ip:port组合自动关联后端pod,即使pod发生改变,kubernetes内部更新这组关联关系,使得service能够匹配到新的pod。这样,通过service提供的固定clusterip,用户再也不用关心需要访问哪个pod,以及pod是否发生改变,大大提高了服务质量。 1.5、负载均衡: 如果pod使用rc创建了多个副本,通过kube-proxy实现负载均衡 1.6、K8s所有的ip以及作用 nodeip:是k8s集群中每个节点的物理网卡的ip地址,是真实存在的物理地址,所有属于这个网络的服务器之间都能通过这个网络直接通信,不管它们中是否有部分节点不属于这个集群,这也表明集群之外的节点访问k8s集群之内的某个节点或者tcp/ip服务的时候,必须通过nodeip进行通信 podip:每个会被分配一个单独的ip,每个pod都提供了一个独立的Endpoint( Pod ip + Container port )以被客户端访问 clusterip:全局的唯一的虚拟ip,在整个service的声明周期内,一旦创建,就不会改变仅仅作用于service对象,由k8s管理和分配ip地址无法被ping,没有实体网络对象来响应必须结合service port 组成一个具体的通信端口,单独的cluster ip不具备tcp/ip通信协议 1.7、集群外部访问k8s 使用域名来实现需要配置ingress,然后kind: Service中name: http-test-ser绑定到kind: Ingress中的serviceName: http-test-ser,如下所示: apiVersion: v1 kind: Service metadata: name: http-test-ser spec: ports: - port: 80 targetPort: 80 selector: name: http-test-dm --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: grafana spec: rules: - host: prom.zhi.io http: paths: - path: / backend: serviceName: http-test-ser servicePort: 80