Pod是kubernetes的最小操作单元,一个Pod里面可以包含多个容器(如Docker容器),每个容器共享Pod的网络、Volume等资源。
Pod-配置文件示例
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
name: pod-demo-redis
spec:
containers:
name: pod-demo-redis
image: kubeguide/redis-master
port: 6379
Pod-配置文件解读
Deployment主要起到管理Pod部署的作用,包括后面的HPA也是通过监控Deployment的目的实现Pod的自动扩缩容。
Deployment-配置文件示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-demo-redis
labels:
name: pod-demo-redis
spec:
replicas: 3
selector:
matchLabels:
app: pod-demo-redis
template:
metadata:
labels:
app: pod-demo-redis
spec:
containers:
name: pod-demo-redis
image: kubeguide/redis-master
ports:
- containerPort: 6379
Deployment-配置文件解读
Kubernetes的实现服发现离开不了Service资源对象,Service自带一种全局唯一的虚拟IP地址-ClusterIP,Kubernetes通过把ClusterIP和Service的name绑定在一起就能简单粗暴地解决了服务发现功能。例如在kubernetes集群内部,不同宿主机的Pod内部都可以使用serviceName:port实现访问,Service的创建往往依赖Pod。
Service-配置文件示例
apiVersion: v1
kind: Service
metadata:
name: demo-redis-service
spec:
selector:
app: demo-boot-redis
type: NodePort
ports:
- port: 8082
targetPort: 8082
protocol: TCP
nodePort: 32088
Service-配置文件解读
创建一个Service类型的资源对象,并且name为demo-redis-service
选择标签(label)为 app: pod-demo-redis 的Pod资源对象进行管理创建服务。
该Service的端口类型为NodePort(可以直接通过宿主机的ip+nodePort访问),targetPort是用来确定提供该服务的容器的端口,Port是该Service的端口,通常设置targetPort和port一样。
Volume(存储卷)是Kubernetes的存储类资源对象,常用的类型有emptyDir和hostPath,其他类型有iscsi、nfs、glusterfs、rbd、gitRepo、configmap、sercret等。同一个Pod内部共享volume。
Volume-配置文件示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-demo-redis
labels:
name: pod-demo-redis
spec:
replicas: 3
selector:
matchLabels:
app: pod-demo-redis
template:
metadata:
labels:
app: pod-demo-redis
spec:
containers:
name: pod-demo-redis
image: kubeguide/redis-master
ports:
- containerPort: 6379
volumeMounts:
- name: demo-emptydir
mountPath: /usr/demo-empty
- name: demo-hostpath
mountPath: /usr/logs
volumes:
- name: demo-emptydir
emptyDir: {}
- name: demo-hostpath
hostPath:
path: /usr/local/logs
Volume-配置文件解读
Ingress是Kubernetes的网关规则配置资源对象,需要和IngressController、实际的网关服务器(例如Nginx、Apisix等)等结合使用。Ingress负责管理Service的访问路由规则、IngressController用以实时监控资源对象Ingress、Service、Endpoint、Secret、Node、Sercret等变化,自动对Nginx进行对应操作。而实现具体的应用层负载均衡则有类似Nginx的服务器负责。
Ingress的配置比较繁琐复杂、通常使用Helm进行配置,该单元另开文章讲述。
HPA全称HorizontalPodAutoscaler,是kubernetes里面的一种资源对象,主要作用是可以对Deployment的pod资源配置水平、垂直扩缩容。
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: my-web-app-hpa
namespace: default
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef
kind: Deployment
name: my-web-app-deploy
targetCPUUtilizationPercentage: 90
++参考书籍为《Kubernetes零基础快速入门》《Kubernetes权威指南》《Nginx应用与运维实战》++