我们以普罗米修斯为例子
使用deploy创建pod部署文件,支持缩容和扩容
cat > deploy-prometheus.yaml <<-'EOF'
#使用的API版本。最新版Kubernetes位于apps/v1的API组
apiVersion: apps/v1
#kind告诉Kubernetes现在定义的是一个Deployment对象
kind: Deployment
#metadata部分定义Deployment的名字和标签
metadata:
#部署名称为
name: deploy-prometheus
#spec下的内容都与Pod有关
spec:
#spec.selector表明Deployment要管理的Pod所必须具备的标签
selector:
#匹配所有标签app且值为prometheus
matchLabels:
app: prometheus
#replicas告诉Kubernetes需要部署多少个Pod副本
replicas: 4
#spec.template下的内容定义了Deployment管理的Pod模板
template:
#元数据定义每一个POD拥有标签 key=app,value=prometheus
metadata:
labels:
app: prometheus
#template.spec说明具体部署的容器与镜像信息
spec:
containers:
#容器名
- name: prometheus
#docker镜像名称
image: prom/prometheus
#容器对外暴露的端口号
ports:
- containerPort: 9090
EOF
创建pod
kubectl apply -f deploy-prometheus.yaml
创建service有4种模式
ClusterIP,NodePort,LoadBalancer,ExternalName
ClusterIP
集群ip 模式,默认 只能在集群内部访问,不能在浏览器访问
创建service文件
cat > svc-prometheus.yaml <<-'EOF'
apiVersion: v1
kind: Service
metadata:
name: clusterip-service
spec:
#默认的service 集群ip只能内部访问 不能在浏览器访问
type: ClusterIP
selector:
app: prometheus
clusterIP: 172.16.32.2
ports:
- name: http
protocol: TCP
#集群内部访问的端口
port: 8000
#pod的端口
targetPort: 9090
EOF
执行创建
kubectl apply -f svc-prometheus.yaml
可以看到,只能在集群内部访问8000端口,不能在浏览器访问
service标签app的名字一定要和pod的标签一样
NodePort(推荐使用)
在k8s中pod的ip是虚拟ip,无法在浏览器访问,那么这个时候要想在浏览器访问
就需要创建service,通过标签绑定和绑定pod的端口,进行映射
浏览器访问service的端口,service访问pod的端口
service是可以通过节点的集群ip在浏览器可以访问
创建service文件
在这里一定要注意标签要和pod的标签一样
type选择NodePort
targetPort 是pod的端口
nodePort 是浏览器访问的端口(端口限制在30000-32767之间)
port 是集群内部访问的端口
cat > svc-prometheus.yaml <<-'EOF'
apiVersion: v1
#描述对象为Service 固定写死
kind: Service
#定义Service的名称
metadata:
name: svc-prometheus
#配置细节
spec:
#通过节点端口对外暴露
type: NodePort
#选择器,选中所有app=prometheus的pod
selector:
app: prometheus
#端口信息
ports:
#Service在集群内部对外暴露的端口
- port: 8000
#pod容器内对外暴露的端口
targetPort: 9090
#节点对外暴露的端口
nodePort: 30001
EOF
创建service
kubectl apply -f svc-prometheus.yaml
查看service
kubectl get svc -o wide
service标签和pod的标签一定要一致
随便使用一个节点的ip 在浏览器访问30001的端口
集群内部端口使用,先查看service的详细信息
kubectl describe svc svc-prometheus
从这里找到集群内部的ip地址 ,然后再linux中访问
因为172的都是虚拟ip,不是我们节点的ip
LoadBalancer
只需要在spec下面添加loadBalancerIP对应的地址,需要云服务商提供负载均衡支持
ExternalName
只需要在spec下添加externalName对应的dns名称
外部服务通过externalName 作为本地服务 和另一个命名空间中的服务进行对话