github.com/alibaba/sealer@v0.8.6-0.20220430115802-37a2bdaa8173/docs/design/global-config_zh.md (about)

     1  # 全局配置
     2  
     3  全局配置的特性是为了暴露出整个集群镜像里面分布式应用的参数,非常推荐的是只暴露出少量用户需要关心的参数。
     4  
     5  如果需要暴露太多参数的话,比如整个helm的values都希望暴露出来,那更建议build一个新镜像把配置放进去覆盖。
     6  
     7  以dashboard为例,我们制作了一个dashboard的集群镜像,但是不同用户在进行安装时希望使用不同的端口号,这种场景sealer提供
     8  一种方式把这个端口号参数透出到Clusterfile的环境变量中去。
     9  
    10  ## 使用全局配置能力
    11  
    12  对于镜像的构建者在制作镜像时需要把这个参数抽离出来,以dashboard的yaml为例:
    13  
    14  dashboard.yaml:
    15  
    16  ```yaml
    17  ...
    18  kind: Service
    19  apiVersion: v1
    20  metadata:
    21    labels:
    22      k8s-app: kubernetes-dashboard
    23    name: kubernetes-dashboard
    24    namespace: kubernetes-dashboard
    25  spec:
    26    ports:
    27      - port: 443
    28        targetPort: {{ .DashBoardPort }}
    29    selector:
    30      k8s-app: kubernetes-dashboard
    31  ...
    32  ```
    33  
    34  编写kubefile,此时需要把yaml拷贝到manifests目录,sealer仅对这个目录下的文件进行渲染:
    35  
    36  ```shell script
    37  FROM kubernetes:1.16.9
    38  COPY dashobard.yaml manifests/
    39  CMD kubectl apply -f manifests/dashobard.yaml
    40  ```
    41  
    42  对于使用者只需要指定集群环境变量即可:
    43  
    44  ```shell script
    45  sealer run -e DashBoardPort=8443 mydashboard:latest -m xxx -n xxx -p xxx
    46  ```
    47  
    48  或者在Clusterfile中指定:
    49  
    50  ```yaml
    51  apiVersion: sealer.aliyun.com/v1alpha1
    52  kind: Cluster
    53  metadata:
    54    name: my-cluster
    55  spec:
    56    image: mydashobard:latest
    57    provider: BAREMETAL
    58    env:
    59      - DashBoardPort=6443 # 在这里指定自定义端口, 会被渲染到镜像的yaml中
    60    ssh:
    61      passwd:
    62      pk: xxx
    63  ...
    64  ```
    65  
    66  ## 与helm配合使用
    67  
    68  sealer在运行时同样会生成一个非常全的Clusterfile文件到etc目录下,意味着helm chart中是可以通过一定的方法获取到这些参数的。
    69  
    70  dashboard的chart values就可以这样写:
    71  
    72  ```yaml
    73  spec:
    74    env:
    75      - DashboardPort=6443
    76  ```
    77  
    78  Kubefile:
    79  
    80  ```yaml
    81  FROM kubernetes:v1.16.9
    82  COPY dashboard-chart .
    83  CMD helm install dashboard dashboard-chart -f etc/global.yaml
    84  ```
    85  
    86  这样global.yaml里面的值就会覆盖掉dashboard中的默认端口参数。
    87  
    88  ## 开发文档
    89  
    90  1. 在apply mountRootfs之前对etc,charts,manifest目录下的文件进行模板渲染,把环境变量和annotations渲染到[配置文件中](
    91     https://github.com/alibaba/sealer/blob/main/pkg/filesystem/filesystem.go#L145) 。
    92  2. 生成global.yaml文件到etc目录下。