在这里插入图片描述



本教程将会介绍如何声明变量以及如何在容器中的命令使用变量。要注意的是,变量的查找和替换并不适用于任意字段,默认仅适用于容器的 envargscommand

运行WordPress,以下是必须的:

  • WordPress 连接 MySQL 数据库
  • MySQL 服务可以被 WordPress 容器访问

1 构建工作空间:

#!/bin/bash
export DEMO_HOME=$(mktemp -d)
export MYSQL_HOME=$DEMO_HOME/mysql
mkdir -p $MYSQL_HOME
export WORDPRESS_HOME=$DEMO_HOME/wordpress
mkdir -p $WORDPRESS_HOME
echo $MYSQL_HOME $WORDPRESS_HOME

执行:

$ bash   vars1.sh 
/tmp/tmp.OXhQnYJmhA/mysql /tmp/tmp.OXhQnYJmhA/wordpress
$ export DEMO_HOME=/tmp/tmp.OXhQnYJmhA
$ export MYSQL_HOME=/tmp/tmp.OXhQnYJmhA/mysql
$ export WORDPRESS_HOME=/tmp/tmp.OXhQnYJmhA/wordpress

2. 下载 resources

下载 WordPress 的 resources 和 kustomization.yaml 。

CONTENT="https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/examples/wordpress/wordpress"

curl -s -o "$WORDPRESS_HOME/#1.yaml"  "$CONTENT/{deployment,service,kustomization}.yaml"

若下载不了出现的问题:
1.使用 Git 同步时出现gnutls_handshake() failed: Error in the pull function
2.raw.githubusercontent.com:443连接的OpenSSL SSL_ERROR_SYSCALL
下载 MySQL 的 resources 和 kustomization.yaml 。

CONTENT="https://raw.githubusercontent.com/kubernetes-sigs/kustomize\/master/examples/wordpress/mysql"

curl -s -o "$MYSQL_HOME/#1.yaml"  "$CONTENT/{deployment,service,secret,kustomization}.yaml"

3. 创建 kustomization.yaml

基于 wordpress 和 mysql 的两个 bases 创建一个新的 kustomization.yaml

cat <<EOF >$DEMO_HOME/kustomization.yaml
resources:
 - wordpress
 - mysql
namePrefix: demo-
patchesStrategicMerge:
 - patch.yaml
EOF

4. 下载 WordPress 的 patchs

在新的 kustomization 中应用 WordPress Deployment 的 patch ,该 patch 包含:

  • 添加初始容器来显示mysql的服务名称
  • 添加允许 wordpress 查找到 mysql 数据库的环境变量

该 patch 内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
spec:
  template:
    spec:
      initContainers:
      - name: init-command
        image: debian
        command:
        - "echo $(WORDPRESS_SERVICE)"
        - "echo $(MYSQL_SERVICE)"
      containers:
      - name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: $(MYSQL_SERVICE)
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password

初始化容器的命令需要依赖于k8s资源对象字段的信息,由占位符变量 $(WORDPRESS_SERVICE)$(MYSQL_SERVICE) 表示。
将变量绑定到k8s对象字段

cat <<EOF >>$DEMO_HOME/kustomization.yaml
vars:
  - name: WORDPRESS_SERVICE
    objref:
      kind: Service
      name: wordpress
      apiVersion: v1
    fieldref:
      fieldpath: metadata.name
  - name: MYSQL_SERVICE
    objref:
      kind: Service
      name: mysql
      apiVersion: v1
EOF

WORDPRESS_SERVICE 来自 wordpress 服务的 metadata.name 字段。如果不指定 fieldref ,则使用默认的 metadata.name 。因此 MYSQL_SERVICE 来自 mysql 服务的 metadata.name 字段。

替换
运行命令查看替换结果:

kustomize build $DEMO_HOME

预期的输出为:

(truncated)
...
     initContainers:
     - command:
       - echo demo-wordpress
       - echo demo-mysql
       image: debian
       name: init-command

扩展阅读:

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐