github.com/alibaba/sealer@v0.8.6-0.20220430115802-37a2bdaa8173/docs/site/src/zh/getting-started/config.md (about)

     1  # 使用Config功能
     2  
     3  使用 config,你可以覆盖或合并任何你想要的配置文件。像chart values、docker daemon.json、kubeadm 配置文件等。
     4  
     5  ## 覆盖配置
     6  
     7  ### 使用Config覆盖重写*calico*自定义配置
     8  
     9  以镜像`registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.8`为例:
    10  
    11  ```yaml
    12  # 默认calico配置文件custom-resources.yaml:
    13  apiVersion: operator.tigera.io/v1
    14  kind: Installation
    15  metadata:
    16    name: default
    17  spec:
    18    calicoNetwork:
    19      ipPools:
    20      - blockSize: 26
    21        cidr: 100.64.0.0/10
    22        encapsulation: IPIP
    23        natOutgoing: Enabled
    24        nodeSelector: all()
    25      nodeAddressAutodetectionV4:
    26        interface: "eth.*|en.*"
    27  ```
    28  
    29  如果不满足默认IP自动检测规则或需要修改CIDR ,则将修改后的配置元数据附加到 Clusterfile 并应用:
    30  
    31  ```yaml
    32  apiVersion: sealer.cloud/v2
    33  kind: Cluster
    34  metadata:
    35    name: default-kubernetes-cluster
    36  spec:
    37    image: registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.8
    38    ssh:
    39      passwd: xxx
    40    hosts:
    41      - ips: [192.168.0.2,192.168.0.3,192.168.0.4]
    42        roles: [master]
    43      - ips: [192.168.0.5]
    44        roles: [node]
    45  ...
    46  ---
    47  apiVersion: sealer.aliyun.com/v1alpha1
    48  kind: Config
    49  metadata:
    50    name: calico
    51  spec:
    52    path: etc/custom-resources.yaml
    53    data: |
    54      apiVersion: operator.tigera.io/v1
    55      kind: Installation
    56      metadata:
    57        name: default
    58      spec:
    59        calicoNetwork:
    60          ipPools:
    61          - blockSize: 26
    62            cidr: 100.64.0.0/10 #需与kubeadm配置中cidr一致
    63            encapsulation: IPIP
    64            natOutgoing: Enabled
    65            nodeSelector: all()
    66          nodeAddressAutodetectionV4:
    67            interface: "eth*|en*" #将IP自动检测规则改成相应符合的规则
    68  ```
    69  
    70  `sealer apply -f Clusterfile`
    71  
    72  ### 使用config覆盖 mysql chart values
    73  
    74  添加mysql配置元数据到Clusterfile并应用:
    75  
    76  ```yaml
    77  apiVersion: sealer.aliyun.com/v1alpha1
    78  kind: Cluster
    79  metadata:
    80    name: my-cluster
    81  spec:
    82    image: registry.cn-qingdao.aliyuncs.com/sealer-app/my-SAAS-all-inone:latest
    83    provider: BAREMETAL
    84  ...
    85  ---
    86  apiVersion: sealer.aliyun.com/v1alpha1
    87  kind: Config
    88  metadata:
    89    name: mysql-config
    90  spec:
    91    path: etc/mysql.yaml
    92    data: |
    93         mysql-user: root
    94         mysql-passwd: xxx
    95  ```
    96  
    97  `sealer apply -f Clusterfile`
    98  
    99  sealer 将使用该数据覆盖文件 `etc/mysql.yaml`
   100  
   101  应用此 Clusterfile 时,sealer 将为应用程序配置生成一些值文件。命名该配置为 etc/mysql-config.yaml etc/redis-config.yaml。
   102  
   103  所以如果你想要使用该配置,Kubefile例如:
   104  
   105  ```yaml
   106  FROM kuberentes:v1.19.9
   107  ...
   108  CMD helm install mysql -f etc/mysql-config.yaml
   109  ```
   110  
   111  ### 用户定义的 docker systemd 配置
   112  
   113  当然,你可以覆盖你想要的rootfs中的其他配置文件:
   114  
   115  ```yaml
   116  .
   117  ├── bin
   118  │   ├── conntrack
   119  │   ├── containerd-rootless-setuptool.sh
   120  │   ├── containerd-rootless.sh
   121  │   ├── crictl
   122  │   ├── kubeadm
   123  │   ├── kubectl
   124  │   ├── kubelet
   125  │   ├── nerdctl
   126  │   └── seautil
   127  ├── cri
   128  │   ├── containerd
   129  │   ├── containerd-shim
   130  │   ├── containerd-shim-runc-v2
   131  │   ├── ctr
   132  │   ├── docker
   133  │   ├── dockerd
   134  │   ├── docker-init
   135  │   ├── docker-proxy
   136  │   ├── rootlesskit
   137  │   ├── rootlesskit-docker-proxy
   138  │   ├── runc
   139  │   └── vpnkit
   140  ├── etc
   141  │   ├── 10-kubeadm.conf
   142  │   ├── Clusterfile  # 镜像默认 Clusterfile
   143  │   ├── daemon.json
   144  │   ├── docker.service
   145  │   ├── kubeadm-config.yaml
   146  │   └── kubelet.service
   147  ├── images
   148  │   └── registry.tar  # registry docker 镜像,将加载此镜像并在集群中运行本地registry
   149  ├── Kubefile
   150  ├── Metadata
   151  ├── README.md
   152  ├── registry # registry data数据,此目录将挂载到本地registry
   153  │   └── docker
   154  │       └── registry
   155  ├── scripts
   156  │   ├── clean.sh
   157  │   ├── docker.sh
   158  │   ├── init-kube.sh
   159  │   ├── init-registry.sh
   160  │   ├── init.sh
   161  │   └── kubelet-pre-start.sh
   162  └── statics
   163      └── audit-policy.yml
   164  ```
   165  
   166  例如,覆盖 docker systemd 配置:
   167  
   168  ```yaml
   169  ---
   170  apiVersion: sealer.aliyun.com/v1alpha1
   171  kind: Config
   172  metadata:
   173    name: docker-config
   174  spec:
   175    path: etc/docker.service
   176    data: |
   177      [Unit]
   178      Description=Docker Application Container Engine
   179      Documentation=https://docs.docker.com
   180      After=network.target
   181  
   182      [Service]
   183      Type=notify
   184      # the default is not to use systemd for cgroups because the delegate issues still
   185      # exists and systemd currently does not support the cgroup feature set required
   186      # for containers run by docker
   187      ExecStart=/usr/bin/dockerd
   188      ExecReload=/bin/kill -s HUP $MAINPID
   189      # Having non-zero Limit*s causes performance problems due to accounting overhead
   190      # in the kernel. We recommend using cgroups to do container-local accounting.
   191      LimitNOFILE=infinity
   192      LimitNPROC=infinity
   193      LimitCORE=infinity
   194      # Uncomment TasksMax if your systemd version supports it.
   195      # Only systemd 226 and above support this version.
   196      #TasksMax=infinity
   197      TimeoutStartSec=0
   198      # set delegate yes so that systemd does not reset the cgroups of docker containers
   199      Delegate=yes
   200      # kill only the docker process, not all processes in the cgroup
   201      KillMode=process
   202  
   203      [Install]
   204      WantedBy=multi-user.target
   205  ```
   206  
   207  ## 合并配置(yaml格式)
   208  
   209  ### 使用Config功能合并*calico*自定义配置
   210  
   211  以镜像`registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.8`为例:
   212  
   213  合并配置只需要关心需要修改的部分,以合并的方式修改calicoIP自动检测规则配置:
   214  
   215  ```yaml
   216  apiVersion: sealer.cloud/v2
   217  kind: Cluster
   218  metadata:
   219    name: default-kubernetes-cluster
   220  spec:
   221    image: registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.8
   222    ssh:
   223      passwd: xxx
   224    hosts:
   225      - ips: [192.168.0.2,192.168.0.3,192.168.0.4]
   226        roles: [master]
   227      - ips: [192.168.0.5]
   228        roles: [node]
   229  ...
   230  ---
   231  apiVersion: sealer.aliyun.com/v1alpha1
   232  kind: Config
   233  metadata:
   234    name: calico
   235  spec:
   236    strategy: merge #默认为覆盖形式,merge表示合并config
   237    path: etc/custom-resources.yaml
   238    data: |
   239      spec:
   240        calicoNetwork:
   241          nodeAddressAutodetectionV4:
   242            interface: "enp*" #将IP自动检测规则改成相应符合的规则
   243  ```
   244  
   245  `sealer apply -f Clusterfile`
   246  
   247  sealer启动后会合并原配置文件$/rootfs/etc/custom-resources.yaml并修改:
   248  
   249  ```yaml
   250  apiVersion: operator.tigera.io/v1
   251  kind: Installation
   252  metadata:
   253    name: default
   254  spec:
   255    calicoNetwork:
   256      ipPools:
   257      - blockSize: 26
   258        cidr: 100.64.0.0/10
   259        encapsulation: IPIP
   260        natOutgoing: Enabled
   261        nodeSelector: all()
   262      nodeAddressAutodetectionV4:
   263        interface: "enp*"
   264  ```
   265  
   266  > merge config 仅支持yaml格式配置。
   267  >`spec.calicoNetwork.nodeAddressAutodetectionV4.interface="enp*"`修改成功。