k8s资源定义并创建haproxy的pod进行负载均衡

k8s资源清单定义入门

k8s的核心资源

  1. workload(工作负载)型资源:
  • Pod
  • ReplicaSet
  • Deployment
  • StatefulSet
  • DaemonSet
  • Job
  • Cronjob
  1. 服务发现及负载均衡型资源:
  • Service
  • Ingress
  1. 配置与存储相关的资源:
  • 存储卷
    • 云端存储
    • 亚马逊弹性块存储
    • SAN
    • GlusterFS(分布式存储)
    • NFS
  • 容器存储接口CSI
  • ConfigMap(配置中心)
  • Secret(保存敏感信息)
  • DownwardAPI(将外部环境的信息输出给容器)
  1. 集群级资源:
  • Nampspace
  • Node
  • Role
  • ClusterRole
  • RoleBinding
  • ClusterRoleBinding
  1. 云数据型资源:
  • HPA
  • PodTemPlate(用于让控制器创建Pod时使用的模般)
  • LlmitRange

创建资源的方式

  1. 使用命令进行创建
  2. 使用命令式资源清单创建
    apiserver仅接受json格式的资源定义
    使用yaml格式提供配置清单,apiserver可自动将其转为json格式并执行
  3. 使用声明式资源清单创建
    可以确保资源尽可能向声明的状态靠近,并且可以随时改变声明、随时应用新的声明

资源配置清单的组成

  1. apiVersion(API版本)
    kubectl api-versions
    alpha(内测版)
    beta(公测版)
    stable(稳定版)
  2. kind(资源类型)
  3. metadata(资源元数据)
    name(同一类别下惟一)
    namespace
    labels
    annotations
    每个资源的引用PATH(/api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME)
  4. spec(期望的状态)
  5. status
    当前的状态,本字段由
    kubenetes集群维护,用户无法定义和更改
  6. 执行kubectl explain pods可以查看pod资源的配置清单应有哪些参数、如何定义等等
  7. 执行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

apiVersionAPI版本
kind资源类型
metadata资源元数据
spec资源规格
replicas副本数量
selector标签选择器
templatePod模板
metadataPod元数据
specPod规格
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

访问测试

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值