k8s资源定义并创建haproxy的pod进行负载均衡
这里写自定义目录标题k8s资源清单定义入门k8s的核心资源创建资源的方式资源配置清单的组成定义一个基于YAML格式的配置文件的自主式pod资源k8s资源清单定义入门k8s的核心资源workload型资源:PodReplicaSetDeploymentStatefulSetDaemonSetJobCronjob服务发现及负载均衡型资源:ServiceIngress配置与存储相关的资源:存储卷云端存储
·
k8s资源定义并创建haproxy的pod进行负载均衡
k8s资源清单定义入门
k8s的核心资源
- workload(工作负载)型资源:
- Pod
- ReplicaSet
- Deployment
- StatefulSet
- DaemonSet
- Job
- Cronjob
- 服务发现及负载均衡型资源:
- Service
- Ingress
- 配置与存储相关的资源:
- 存储卷
- 云端存储
- 亚马逊弹性块存储
- SAN
- GlusterFS(分布式存储)
- NFS
- 容器存储接口CSI
- ConfigMap(配置中心)
- Secret(保存敏感信息)
- DownwardAPI(将外部环境的信息输出给容器)
- 集群级资源:
- Nampspace
- Node
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
- 云数据型资源:
- HPA
- PodTemPlate(用于让控制器创建Pod时使用的模般)
- LlmitRange
创建资源的方式
- 使用命令进行创建
- 使用命令式资源清单创建
apiserver仅接受json格式的资源定义
使用yaml格式提供配置清单,apiserver可自动将其转为json格式并执行 - 使用声明式资源清单创建
可以确保资源尽可能向声明的状态靠近,并且可以随时改变声明、随时应用新的声明
资源配置清单的组成
- apiVersion(API版本)
kubectl api-versions
alpha(内测版)
beta(公测版)
stable(稳定版) - kind(资源类型)
- metadata(资源元数据)
name(同一类别下惟一)
namespace
labels
annotations
每个资源的引用PATH(/api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME) - spec(期望的状态)
- status
当前的状态,本字段由
kubenetes集群维护,用户无法定义和更改 - 执行kubectl explain pods可以查看pod资源的配置清单应有哪些参数、如何定义等等
- 执行kubectl explain pods.metadata可以查看pods的metadata参数如何配置
定义一个基于YAML格式的配置文件的自主式pod资源
资源编排(YAML)
YAML文件格式说明
K8s是一个容器编排引擎,使用YAML文件编排要部署应用,因此在学习之前,应先了解YAML语法格式:
- 缩进表示层级关系
- 不支持制表符“tab”缩进,使用空格缩进
- 通常开头缩进2个空格
- 字符后缩进1个空格,如冒号、逗号等
- “- - -”表示YAML格式,一个文件的开始
- “#”注释
YAML文件格式说明
等同于: kubectl create deployment web --image=lizhenliang/java-demo --replicas=3-n default
apiVersion | API版本 |
kind | 资源类型 |
metadata | 资源元数据 |
spec | 资源规格 |
replicas | 副本数量 |
selector | 标签选择器 |
template | Pod模板 |
metadata | Pod元数据 |
spec | Pod规格 |
containers | 容器配置 |
k8s资源定义并创建haproxy的pod进行负载均衡
先简单的做出两个运行httpd程序的pod,其中默认的index.html文件不一样
[root@master ~]# vim Dockerfile
FROM busybox
RUN mkdir /data && echo 'hello,this is a test page > /data/index.html
CMD ["/bin/httpd","-f","-h","/data"]
[root@master ~]# docker build -t bravealove1/httpd:v0.1
Successfully built 8adfcb109338
Successfully tagged wjj200112/httpd:v0.1
[root@master ~]# vim Dockerfile
FROM busybox
RUN mkdir /data && echo 'hello,this is a test page 2' > /data/index.html
CMD ["/bin/httpd","-f","-h","/data"]
[root@master ~]# docker build -t wjj200112/httpd:v0.2 .
Successfully built 9a5188dcf431
Successfully tagged bravealove1/httpd:v0.2
apache1
#yml文件
[root@master haproxy]# cat apache1.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web1
labels:
app: web1
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: web1
template:
metadata:
labels:
app: web1
spec:
containers:
- image: wjj200112/httpd:v0.1
imagePullPolicy: Always
name: web1
---
apiVersion: v1
kind: Service
metadata:
name: web1
labels:
app: web1
spec:
ports:
- port: 80
targetPort: 80
selector:
app: web1
clusterIP: 10.97.0.50
#创建
[root@master haproxy]# kubectl create -f apache1.yml
deployment.apps/web1 created
service/web1 created
#查看
[root@master haproxy]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/web1-7cf8bc594f-t5btg 1/1 Running 0 26s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 74m
service/web1 ClusterIP 10.97.0.50 <none> 80/TCP 26s
apache2
#yml文件
[root@master haproxy]# cat apache2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web2
labels:
app: web2
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: web2
template:
metadata:
labels:
app: web2
spec:
containers:
- image: wjj200112/httpd:v0.2
imagePullPolicy: Always
name: web2
---
apiVersion: v1
kind: Service
metadata:
name: web2
labels:
app: web2
spec:
ports:
- port: 80
targetPort: 80
selector:
app: web2
clusterIP: 10.97.0.10
#创建
[root@master haproxy]# kubectl create -f apache2.yml
deployment.apps/web2 created
service/web2 created
#查看
[root@master haproxy]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/web2-57c7b6f7cb-sk86h 1/1 Running 0 28s
pod/web1-7cf8bc594f-t5btg 1/1 Running 0 112s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/web2 ClusterIP 10.97.0.10 <none> 80/TCP 28s
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 75m
service/web1 ClusterIP 10.97.0.50 <none> 80/TCP 112s
编写写资源清单定义haproxy
[root@master haproxy]# cat haproxy.yml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: haproxy
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: haproxy
template:
metadata:
labels:
app: haproxy
spec:
containers:
- image: best2001/haproxy:v3.0
imagePullPolicy: Always
env:
- name: RSs
value: "10.97.0.10 10.97.0.50"
name: haproxy
ports:
- containerPort: 80
hostPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: haproxy
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: haproxy
type: NodePort
#创建
[root@master haproxy]# kubectl create -f haproxy.yml
deployment.apps/haproxy created
service/haproxy created
#查看是否创建成功
[root@master haproxy]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/haproxy-7565dc6587-h8sdg 1/1 Running 0 18s
pod/web2-57c7b6f7cb-sk86h 1/1 Running 0 81s
pod/web1-7cf8bc594f-t5btg 1/1 Running 0 2m45s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/haproxy NodePort 10.99.52.161 <none> 80:31884/TCP 18s
service/web2 ClusterIP 10.97.0.10 <none> 80/TCP 81s
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 76m
service/web1 ClusterIP 10.97.0.50 <none> 80/TCP 2m45s
访问测试
更多推荐
已为社区贡献4条内容
所有评论(0)