K8s资源清单定义haproxy负载均衡
目录k8s的核心资源workload型资源服务发现及负载均衡型资源配置与存储相关的资源集群级资源元数据型资源创建资源的方式使用命令进行创建使用命令式资源清单创建使用声明式资源清单创建YAML文件创建资源对象YAML文件格式说明k8s的核心资源workload型资源PodReplicaSetDeploymentStatefulSetDaemonSetJobCronjob服务发现及负载均衡型资源Ser
·
目录
k8s的核心资源
workload型资源
- Pod
- ReplicaSet
- Deployment
- StatefulSet
- DaemonSet
- Job
- Cronjob
服务发现及负载均衡型资源
- Service
- Ingress
配置与存储相关的资源
-
存储卷Volume:
云端存储
亚马逊弹性块存储
SAN
Gluster(分布式存储)
NFS -
容器存储接口
-
ConfigMap(配置中心)
-
ConfigMap(配置中心)
-
DownwardAPI(将外部环境的信息输出给容器)
集群级资源
Nampspace
Node
Role
ClusterRole
RoleBinding
ClusterRoleBinding
元数据型资源
- HPA
- PodTemplate(用于让控制器创建Pod时使用的模板)
- LlmitRange
创建资源的方式
使用命令进行创建
使用命令式资源清单创建
- apiserver仅接收json格式的资源定义
- 使用yaml格式提供配置清单,apiserver可自动将其转为json格式并执行
使用声明式资源清单创建
使用声明式资源清单创建态靠近,并且可以随时改变声明、随时应用新的声明
YAML文件创建资源对象
apiVersion | API版本 |
---|---|
kind | 资源类型 |
metadata | 资源元数据 |
spec | 资源规格 |
replicas | 副本数量 |
selector | 标签选择器 |
template | Pod模板 |
metadata | Pod元数据 |
spec | Pod规格 |
containers | 容器配置 |
YAML文件格式说明
K8s是一个容器编排引擎,使用YAML文件编排要部署应用,因此在学习之前,应先了解YAML语法格式:
-
缩进表示层级关系
-
不支持制表符“tab”缩进,使用空格缩进·通常开头缩进2个空格
-
字符后缩进1个空格,如冒号、逗号等
-
“- - -”表示YAML格式,一个文件的开始
-
“#”注释
haproxy
先简单的做出两个运行httpd程序的pod,其中默认的index.html文件不一样
[root@master ~]# mkdir httpd1
[root@master ~]# cd httpd1/
[root@master httpd1]# vim Dockerfile
[root@master httpd1]# cat Dockerfile
FROM busybox
RUN mkdir /data && echo 'This is testya1' > /data/index.html
CMD ["/bin/httpd","-f","-h","/data"]
[root@master httpd1]# docker build -t weixiaoya/httpd1:latest .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM busybox
latest: Pulling from library/busybox
3cb635b06aa2: Pull complete
Digest: sha256:b5cfd4befc119a590ca1a81d6bb0fa1fb19f1fbebd0397f25fae164abe1e8a6a
Status: Downloaded newer image for busybox:latest
---> ffe9d497c324
Step 2/3 : RUN mkdir /data && echo 'This is testya1' > /data/index.html
---> Running in bfbaf3d5b367
Removing intermediate container bfbaf3d5b367
---> d4e5ec8340e3
Step 3/3 : CMD ["/bin/httpd","-f","-h","/data"]
---> Running in f4507bd2f819
Removing intermediate container f4507bd2f819
---> 3315d9a3de6d
Successfully built 3315d9a3de6d
Successfully tagged weixiaoya/httpd1:latest
[root@master ~]# mkdir httpd2
[root@master ~]# cd httpd2
[root@master httpd2]# vim Dockerfile
[root@master httpd2]# cat Dockerfile
FROM busybox
RUN mkdir /data && echo 'This is testya2' > /data/index.html
CMD ["/bin/httpd","-f","-h","/data"]
[root@master httpd2]# docker build -t weixiaoya/httpd2:latest .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM busybox
---> ffe9d497c324
Step 2/3 : RUN mkdir /data && echo 'This is testya2' > /data/index.html
---> Running in 54a2d9c4dd9c
Removing intermediate container 54a2d9c4dd9c
---> 876e6a00be8e
Step 3/3 : CMD ["/bin/httpd","-f","-h","/data"]
---> Running in c698d1cff670
Removing intermediate container c698d1cff670
---> c60acffad56b
Successfully built c60acffad56b
Successfully tagged weixiaoya/httpd2:latest
用这两个镜像做出两个pod并做出两个service
[root@master ~]# vim httpd1.yaml
[root@master ~]# cat httpd1.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: httpd1
name: httpd1
spec:
replicas: 1
selector:
matchLabels:
app: httpd1
template:
metadata:
labels:
app: httpd1
spec:
containers:
- image: weixiaoya/httpd1:latest
name: httpd1
---
apiVersion: v1
kind: Service
metadata:
name: httpd1
spec:
ports:
- port: 80
targetPort: 80
selector:
app: httpd1
[root@master ~]# vim httpd2.yaml
[root@master ~]# cat httpd2.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: httpd2
name: httpd2
spec:
replicas: 1
selector:
matchLabels:
app: httpd2
template:
metadata:
labels:
app: httpd2
spec:
containers:
- image: weixiaoya/httpd2:latest
name: httpd2
---
apiVersion: v1
kind: Service
metadata:
name: httpd2
spec:
ports:
- port: 80
targetPort: 80
selector:
app: httpd2
[root@master ~]# kubectl create -f httpd1.yaml
deployment.apps/httpd1 created
service/httpd1 created
[root@master ~]# kubectl create -f httpd2.yaml
deployment.apps/httpd2 created
service/httpd2 created
查看创建的deployment以及service
[root@master ~]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/httpd1-79cd6b6b9b-jgqvg 1/1 Running 0 9m24s
pod/httpd2-657ddc4ddc-x2w5l 1/1 Running 0 64m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/httpd1 ClusterIP 10.107.249.52 <none> 80/TCP 8m14s
service/httpd2 ClusterIP 10.100.101.5 <none> 80/TCP 8m6s
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 38h
编写写资源清单定义haproxy
[root@master ~]# vi haproxy.yaml
[root@master ~]# cat haproxy.yaml
---
apiVersion: apps/v1
kind: deployment
metadata:
labels:
app: haproxy
name: haproxy
spec:
replicas: 1
selector:
matchLabels:
app: haproxy
template:
metadate:
labels:
app: haproxy
spec:
containers:
- image: weixiaoya/haproxy:v1-alpine
name: haproxy
env:
- name: RSIP
value: "10.107.249.52 10.100.101.5"
---
apiVersion: v1
kind: Service
metadata:
name: haproxy
spec:
ports:
- port: 80
target: 80
selector:
app: haproxy
type: NodePort
[root@master ~]# kubectl apply -f haproxy.yaml
deployment.apps/haproxy created
service/haproxy created
测试
[root@master mainfest]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/haproxy-7b5bdbcb89-vhkpw 1/1 Running 0 7m48s
pod/httpd1-79cd6b6b9b-jgqvg 1/1 Running 0 10m
pod/httpd2-657ddc4ddc-x2w5l 1/1 Running 0 65m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/haproxy NodePort 10.97.133.221 <none> 80:31527/TCP 7m48s
service/httpd1 ClusterIP 10.107.249.52 <none> 80/TCP 10m
service/httpd2 ClusterIP 10.100.101.5 <none> 80/TCP 65m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d4h
[root@master ~]# curl 192.168.235.178:31527
This is testya1
[root@master ~]# curl 192.168.235.178:31527
This is testya2
更多推荐
已为社区贡献3条内容
所有评论(0)