Kubernetes集群部署实践

WordPress 网站

WordPress 网站基本架构

在这里插入图片描述
这个系统可以说是比较典型的网站了。MariaDB 作为后面的关系型数据库,端口号是 3306;WordPress 是中间的应用服务器,使用 MariaDB 来存储数据,它的端口是 80;
Ingress Controller是前面的反向代理,它对外暴露 80 端口,然后把请求转发给 WordPress。

WordPress 网站部署 MariaDB

1、数据库变量ConfigMap

先要用 ConfigMap 定义数据库的环境变量,有 DATABASE、USER、PASSWORD、ROOT_PASSWORD:

apiVersion: v1
kind: ConfigMap
metadata:
  name: maria-cm

data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '123'
  ROOT_PASSWORD: '123'

执行命令

# 新增编辑marial configMap文件,把上面内容copy进去
vim marial-cm.yml
# 应用该配置
kubectl apply -f marial-cm.yml
#查看cm资源
kubectl get cm

在这里插入图片描述

2、部署MariaDB Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: maria-dep
  name: maria-dep

spec:
  replicas: 1
  selector:
    matchLabels:
      app: maria-dep

  template:
    metadata:
      labels:
        app: maria-dep
    spec:
      containers:
      - image: mariadb:10
        name: mariadb
        ports:
        - containerPort: 3306

        envFrom:
        - prefix: 'MARIADB_'
          configMapRef:
            name: maria-cm

执行命令

vim marial-deployment.yml
kubectl apply -f marial-deployment.yml 
#等待一会就好了
kubectl get deployments.apps

在这里插入图片描述
在这里插入图片描述

3、部署MariaDB Service

MariaDB 定义一个 Service 对象,映射端口 3306,让其他应用不再关心 IP 地址,直接用 Service 对象的名字来访问数据库服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: maria-dep
  name: maria-svc

spec:
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: maria-dep

创建一个名为 maria-svc 的 Service

  • spec.ports 部分指定了服务监听的端口和转发到后端 Pod 的目标端口。在这里,服务监听的端口是 3306,并将请求转发到后端 Pod 的端口也是 3306。
  • selector 部分指定了服务将代理到哪些后端 Pod。在这里,服务将代理到标签为 app: maria-dep 的 Pod。

这意味着通过 maria-svc 服务访问端口 3306,请求将被转发到具有标签 app: maria-dep 的 Pod 上的端口 3306。

执行命令

 vim marial-service.yml 
 kubectl apply -f marial-service.yml
 kubectl get svc

在这里插入图片描述

WordPress 网站部署 WordPress

1、WordPress ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: wp-cm

data:
  HOST: 'maria-svc'
  USER: 'wp'
  PASSWORD: '123'
  NAME: 'db'

和上面一样的操作
执行命令

vim wp-cm.yml
kubectl apply -f wp-cm.yml 
#查看cm资源
kubectl get cm

2、部署WordPress Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wp-dep
  name: wp-dep

spec:
  replicas: 2
  selector:
    matchLabels:
      app: wp-dep

  template:
    metadata:
      labels:
        app: wp-dep
    spec:
      containers:
      - image: wordpress:5
        name: wordpress
        ports:
        - containerPort: 80

        envFrom:
        - prefix: 'WORDPRESS_DB_'
          configMapRef:
            name: wp-cm

执行命令

vim wp-deploy.yml
kubectl apply -f wp-deploy.yml 
kubectl get pod

在这里插入图片描述

3、部署WordPress Service
apiVersion: v1
kind: Service
metadata:
  labels:
    app: wp-dep
  name: wp-svc

spec:
  ports:
  - name: http80
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30088

  selector:
    app: wp-dep
  type: NodePort

执行命令

vim wp-svc.yml
kubectl apply -f wp-svc.yml 
kubectl get svc

在这里插入图片描述
因为 WordPress 的 Service 对象是 NodePort 类型的,我们可以在集群的每个节点上访问 WordPress 服务。比如一个节点的 IP 地址是

“自己机器ip”,那么你就在浏览器的地址栏里输入“http://自己机器ip:30088”,其中的“30088”就是在 Service 里指定的节点端口号,然后就能够看到 WordPress 的安装界面了:
在这里插入图片描述

WordPress 网站部署 Nginx Ingress Controller

1、部署Ingress Class
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: wp-ink

spec:
  controller: nginx.org/ingress-controller

执行命令

vim wp-ingress-class.yml
kubectl apply -f wp-ingress-class.yml 
2、部署Ingress

用 kubectl create 命令生成 Ingress 的样板文件,指定域名是“wp.test”,后端 Service 是“wp-svc:80”,Ingress Class 就是刚定义的“wp-ink”:

kubectl create ing wp-ing --rule="wp.test/=wp-svc:80" --class=wp-ink $out

Ingress YAML 就是这样,注意路径类型我还是用的前缀匹配“Prefix”:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wp-ing

spec:
  ingressClassName: wp-ink

  rules:
  - host: wp.test
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: wp-svc
            port:
              number: 80

执行命令

vim wp-ingress.yml
kubectl apply -f wp-ingress.yml 
3、部署Ingress Controller

Ingress Controller 不使用 Service

给它的 Pod 加上一个特殊字段 hostNetwork,让 Pod 能够使用宿主机的网络,相当于另一种形式的 NodePort:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: wp-kic-dep
  namespace: nginx-ingress
spec:
  selector:
    matchLabels:
      app: wp-kic-dep
  template:
    metadata:
      labels:
        app: wp-kic-dep
        app.kubernetes.io/name: nginx-ingress
    spec:
      serviceAccountName: nginx-ingress
      hostNetwork: true
      automountServiceAccountToken: true
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      containers:
      - image: nginx/nginx-ingress:2.2-alpine
        imagePullPolicy: IfNotPresent
        name: nginx-ingress
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        - name: readiness-port
          containerPort: 8081
        - name: prometheus
          containerPort: 9113
        readinessProbe:
          httpGet:
            path: /nginx-ready
            port: readiness-port
          periodSeconds: 1
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
         #limits:
         #  cpu: "1"
         #  memory: "1Gi"
        securityContext:
          allowPrivilegeEscalation: true
#          readOnlyRootFilesystem: true
          runAsUser: 101 #nginx
          runAsNonRoot: true
          capabilities:
            drop:
            - ALL
            add:
            - NET_BIND_SERVICE
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        args:
          - -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
          - -ingress-class=wp-ink

执行命令

vim wp-ingress-controller.yml
kubectl apply-f wp-ingress-controller.yml

在这里插入图片描述

4、访问测试

Ingress 使用的是 HTTP 路由规则,用 IP 地址访问是无效的,所以在集群外的主机上必须能够识别我们的“wp.test”域名,也就是说要把域名“wp.test”解析到 Ingress Controller 所在的节点上。

Mac,那就修改 /etc/hosts; Windows,就修改 C:\Windows\System32\Drivers\etc\hosts,添加一条解析规则就行:


自己服务器ip  wp.test

直接用域名“wp.test”访问

在这里插入图片描述

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值