Kubernetes现有的功能
- 自动装箱
- 自我修复
- 水平扩展
- 服务发现
- 滚动更新
- 版本回退
- 密钥和配置管理
- 存储编排:自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph、Cinder等)公共云存储服务等
一张图描述k8s的工作方式
一张图描述k8s容器编排
k8s中的基础概念
- Pod:其实就是容器的升级版
- Deployment:Deployment 实现了 k8s 项目中Pod水平扩展/收缩的功能
- ReplicaSet:是Deployment的一个子集,Deployment滚动升级现有的容器,实际操纵的是ReplicaSet 对象,而不是 Pod 对象
- Service:提供一个固定的方式访问到Pod,一组Pod实例的负载均衡
- Ingress:是k8s里面的全局的负载均衡服务,通过访问的 URL,把请求转发给不同的后端 Service。
- ConfigMap:应用的配置对象, Kubernetes是一切皆对象的设计思想 一张图来描述 Deployment、 ReplicaSet、 Pod 的关系:
Service目前有4种类型:
- ClusterIP: 是 K8S 当前默认的 Service 类型。将 service 暴露于一个仅集群内可访问的虚拟 IP 上。
- NodePort: 是通过在集群内所有 Node 上都绑定固定端口的方式将服务暴露出来,这样便可以通过 : 访问服务了。
- LoadBalancer: 是通过 Cloud Provider 创建一个外部的负载均衡器,将服务暴露出来,并且会自动创建外部负载均衡器路由请求所需的 Nodeport 或 ClusterIP 。
- ExternalName: 是通过将服务由 DNS CNAME 的方式转发到指定的域名上将服务暴露出来
从外界连通Service与Service的三种方式
- NodePort 模式也和Service一样,是由kube-proxy在每台宿主机上生成一条对应的iptables规则
- LoadBalancer 适用于公有云上的 Kubernetes 服务,在公有云上你可以指定一个 LoadBalancer 类型的,公有云提供的 k8s 服务,都使用了一个叫作 CloudProvider 的转接层来跟公有云本身的 API 进行对接。当 LoadBalancer 类型的 Service 被提交后,k8s 就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP 地址配
- ExternalName,用的少,没看懂杂用的!
pod的常用命令
- kubectl get pod # 查看pod的运行状态
- kubectl get pod website -o yaml # 查看指定pod的详细信息
- kubectl describe pod website # Pod创建过程中经过的 Events
- kubectl exec -it website – /bin/sh # 进入到这个容器里面去
- kubectl get endpoints hostnames # 被 selector 选中的 Pod,就称为 Service 的 Endpoints,endpoints = ep
- kubectl get Ingress
- kubectl describe ingress test-ingress
- kubectl get ds
DaemonSet容器化守护进程的应用场景:
各种网络插件的 Agent 组件、各种存储插件的 Agent 组件、各种监控组件和日志收集的组件
Job与CronJob,离线业务
- Deployment、StatefulSet,以及 DaemonSet 这三个编排概念主要编排的对象都是“在线业务”,长作业;
- Job这种api对象在业务在计算完成后就直接退出了,这种离线任务如果依然用 Deployment 来管理这种业务的话,就会发现 Pod 会在计算结束后退出,然后被 Deployment Controller 不断地重启
PV、PVC、StorageClass
- PV 是持久化存储数据卷,Volume指的就是一个远程存储服务挂载在宿主机上的持久化目录,而PV指的是这个 Volume 在 Kubernetes 里的 API 对象。
- PVC 描述的是Pod所希望使用的持久化存储的属性。比如,Volume 存储的大小、可读写权限等等
- StorageClass 的 API 对象的作用其实就是创建 PV 的模板,k8s根据pvc自动创建PV叫作Dynamic Provisioning,人工管理 PV 的方式就叫作 Static Provisioning
- 通常情况下,PV 对象是由运维人员事先创建在 k8s 集群里待用的
Pv、Pvc、StorageClass概念之间的关系