k8s部署redis+php留言板案例

本文转自https://freeaihub.com/article/deploy-redis-php-guestbook-in-kubernetes.html,该页可在线运行本页实例。

本节在部署完成k8s环境的基础上,首先进行redis数据库的部署及服务暴露,再进行php留言板程序的部署及服务暴露,最终完成使用k8s部署完成一个简单的带数据库后端的web应用。

k8s环境的安装及配置(单节点模式)

前往该页https://freeaihub.com/kubernetes/setup.html,按该页提示完成k8s的安装。以便进行下一步的操作。

导入相关镜像

ctr -n k8s.io i import /share/images/redis.tar
ctr -n k8s.io i import /share/images/gb-frontend.v4.tar

部署 Redis

下面包含的清单文件指定了一个 Deployment 控制器,该控制器运行一个 Redis 主节点 Pod 副本。

cat << EOF | kubectl create -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 200m
            memory: 100Mi
        ports:
        - containerPort: 6379

查询 Pod 列表以验证 Redis 主节点 Pod 是否正在运行:

kubectl get pods

创建Redis服务

留言板应用程序需要往 Redis 主节点中写数据。因此,需要创建 Service 来代理 Redis 主节点 Pod 的流量。Service 定义了访问 Pod 的策略。

cat << EOF | kubectl create -f -
apiVersion: v1
kind: Service
metadata:
  name: redis
  labels:
    app: redis
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis

验证

kubectl get service

部署前端留言板

留言板应用程序有一个 web 前端,服务于用 PHP 编写的 HTTP 请求。

cat << EOF | kubectl create -f -
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: frontend
  labels:
    app: guestbook
spec:
  selector:
    matchLabels:
      app: guestbook
      tier: frontend
  replicas: 3
  template:
    metadata:
      labels:
        app: guestbook
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google-samples/gb-frontend:v4
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 80

验证

kubectl get pods -l app=guestbook

创建留言板的服务

应用的 redis 和 服务只能在容器集群中访问,因为服务的默认类型是 ClusterIP。ClusterIP 为服务指向的 Pod 集提供一个 IP 地址。这个 IP 地址只能在集群中访问。

如果您希望客人能够访问您的留言板,您必须将前端服务配置为外部可见的,以便客户机可以从容器集群之外请求服务。只能通过 NodePort 公开服务。

更新kuberntes NodePort端口范围:

因为Kuberntes默认公开端口是30000-30553,我们需要手动进行修改。

sed -i  '17i\    - --service-node-port-range=80-30553' /etc/kubernetes/manifests/kube-apiserver.yaml

创建前端的服务

cat << EOF | kubectl create -f -
apiVersion: v1
kind: Service
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  type: NodePort 
  ports:
  - port: 80
  selector:
    app: guestbook
    tier: frontend

验证服务部署情况

kubectl get services

使用vnc浏览器访问

在右侧实验区+号打开open http on freeaiub选项,即可预览。

总结:

通过本节的实践,您可以体会并理解两种不同服务暴露模式ClusterIP和NodePort的在使用的中实际区别。

猜你喜欢

转载自www.cnblogs.com/freeaihub/p/13180304.html