Pod对象
• Pod基本概念
Pod是一个逻辑抽象概念,Kubernetes创建和管理的最小单元,
一个Pod由一个容器或多个容器组成。
Pod特点:
• 一个Pod可以理解为是一个应用实例,提供服务
• Pod中容器始终部署在一个Node上
• Pod中容器共享网络、存储资源
Pod主要用法:
**• 运行单个容器:**最常见的用法,在这种情况下,可以将Pod看做是单
个容器的抽象封装
**• 运行多个容器:**属于边车模式(Sidecar) ,通过再Pod中定义专门容
器,来执行主业务容器需要的辅助工作,这样好处是将辅助功能同主
业务容器解耦,实现独立发布和能力重用。
例如:
• 日志收集
• 应用监控
Pod管理命令
#创建Pod:
kubectl apply -f pod.yaml
或者使用命令:kubectl run nginx --image=nginx
#查看Pod:
kubectl get pods
kubectl describe pod <Pod名称>
#查看日志:
kubectl logs <Pod名称> [-c CONTAINER]
kubectl logs <Pod名称> [-c CONTAINER] -f
#进入容器终端:
kubectl exec <Pod名称> [-c CONTAINER] -- bash
#删除Pod:
kubectl delete pod <Pod名称>
Service 对外暴露应用
Service存在的意义
Service引入主要是解决Pod的动态变化,提供统一访问入口:
• 防止Pod失联,准备找到提供同一个服务的Pod(服务发现)
• 定义一组Pod的访问策略(负载均衡)
Pod与Service的关系
• Service通过标签关联一组Pod
• Service为一组Pod提供负载均衡能力
Service定义与创建
#创建service:
kubectl apply -f service.yaml
#查看service:
kubectl get service
定义Service:
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: ClusterIP # 服务类型
ports:
- port: 80 # Service端口
protocol: TCP # 协议
targetPort: 80 # 容器端口(应用程序监听端口)
selector:
app: web # 指定关联Pod的标签
Service三种常用类型
**• ClusterIP:**集群内部使用;默认,分配一个稳定的IP地址,即VIP,只能在集群内部访问。
**• NodePort:**对外暴露应用;在每个节点上启用一个端口来暴露服务,可以在集群
外部访问。也会分配一个稳定内部集群IP地址。
访问地址:<任意NodeIP>:
端口默认范围:30000-32767
**• LoadBalancer:**对外暴露应用,适用公有云;与NodePort类似,在每个节点上启用一个端口来暴
露服务。除此之外,Kubernetes会请求底层云平台(例如阿里云、腾
讯云、AWS等)上的负载均衡器,将每个Node
([NodeIP]:[NodePort])作为后端添加进去。
Ingress 对外暴露应用
Ingress为弥补NodePort不足而生
NodePort存在的不足:
• 一个端口只能一个服务使用,端口需提前规划
• 只支持4层负载均衡
Pod与Ingress的关系
Ingress:
• 公开了从集群外部到集群内服务的HTTP和HTTPS路由的规则集合,而具体实现流量路由则是由Ingress Controller负责。
• K8s中的一个抽象资源,给管理员
提供一个暴露应用的入口定义方法
**Ingress Controller:**根据Ingress生成具体
的路由规则,并对Pod负载均衡器
使用流程:
- 部署Ingress Controller
- 创建Ingress规则
Ingress Controller
Ingress Controller有很多实现,我们这里采用官方维护的Nginx控制器。
• 项目地址:https://github.com/kubernetes/ingress-nginx
• 下载YAML:wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
修改YAML:
• 镜像地址修改成国内的:lizhenliang/nginx-ingress-controller:0.30.0
• 将Ingress Controller暴露,一般使用宿主机网络(hostNetwork: true)或者使用NodePort其他控制器Ingress 规则配置
Ingress 规则配置
#创建:
kubectl apply -f xxx.yaml
#查看:
kubectl get ingress
测试:本地电脑绑定hosts记录对应ingress里面配置的域名
例:<Ingress Controller Pod所在Node IP> web.aliangedu.cn
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aliangedu
spec:
rules:
- host: web.aliangedu.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 80
Kubernetes的简单描述(一)
Kubernetes的简单描述(二)
Kubernetes的简单描述(三)
Kubernetes的简单描述(四)