
# Rancher 배포 

## 1. 배포시 주의 사항
- ingress 배포를 위해서는 인증서가 [secret으로 배포](#인증서-secret-생성)되어 있어야 한다.
- [사설 인증서 사용](#사설-인증서-사용)시 ca를 secret으로 배포되어 있어야 한다.

## 2.custom-values.yaml 설명

- custom-values.yaml에 정의된 값에 대한 설명이다.

### 1) 오프라인 설정
- private 환경 배포시 사용한다.

| Name                   | 설명                                                         | 기본값 |
| ---------------------- | ------------------------------------------------------------ | ------ |
| `systemDefaultRegistry` | 오프라인 설치 시에 설정. <br />paasup 설치시에는 "paasup.io"로 설정 | `""`   |
| `rancherImage` | 오프라인 설치 시에 설정. <br />paasup 설치시에는 "paasup.io/rancher/rancher"로 설정 | `""`   |


### 2)  Pod 설정

| Name                     | 설명                               | 기본값    |
| ------------------------ | ---------------------------------- | --------- |
| `extraEnv`                 | rancher pod의 replicas 설정.         | "1"       |
| `replicas`                 | rancher pod의 replicas 설정.         | "1"       |
| `tolerations`              | rancher pod의 toleration 설정.       | `[]`      |
| `nodeSelector`             | rancher pod의 nodeSelector 설정.     | `{}`      |
| `resources.request.cpu`    | rancher pod의 cpu requst 설정.       | `"100m"`  |
| `resources.request.memory` | rancher pod의 memory requst 설정.    | `"300Mi"` |
| `resources.limits.cpu`     | rancher pod의 cpu limits 설정.       | `"300m"`  |
| `resources.limits.memory`  | rancher pod의 memory limits 설정.    | `500Mi`   |

### 3) Timezone 설정

- pod의 기본 timezone 설정을 위해 추가. 
- 기본값으로 KST를 사용하기 위하여 Asia/Seolul로 설정하였다.

``` yaml
extraEnv:
- name: TZ
  value: Asia/Seoul
```

### 4) Ingress 설정

#### 4.1) tls 시크릿 직접 생성


- Rancher에서 ingress 사용을 위해서는 다음과 같이 설정할 수 있다.
  ``` yaml
  # ingress 배포 전 인증서 secret 배포 필요(secret 이름은 platform)
  hostname: rancher.example.org
  ingress:
    enable: true
    tls:
      source: secret
      secretName: rancher-tls-ingress
    extraAnnotations:    
      konghq.com/connect-timeout: "30000"
      konghq.com/read-timeout: "1800000"
      konghq.com/write-timeout: "1800000"
  
  # 사설인증서 사용시 true 설정
  ## privateCA를 true로 설정
  privateCA: true
  ```
  
- ingress 사용을 위해서는 인증서를 secret으로 제공해야한다. 로컬 파일을 이용해 secret을 생성하는 방법은 다음과 같다.
  ``` sh
  kubectl create secret tls rancher-tls-ingress --cert=<path-to-cert-file> --key=<path-to-key-file> -n <namespace>
  ```

- 사설 인증서 사용시에는 ca를 secret으로 생성해야 한다. 로컬 파일을 이용해 secret을 생성하는 방법은 다음과 같다. secret의 이름은 `tls-ca`로 생성해야 한다.
  ``` sh
  kubectl create secret generic tls-ca --from-file=${CERT_FILE} -n ${NAMESPACE}
  ```


#### 4.2) cert-manager를 이용한 자동 생성


- cert manager를 통해 인증서 자동 생성 시 `custom-values.yaml` 수정한다.
``` yaml
# ingress 배포 전 인증서 secret 배포 필요(secret 이름은 platform)
hostname: rancher.example.org
ingress:
  enable: true
  tls:
    source: secret
    secretName: rancher-tls-secret
  extraAnnotations:    
    konghq.com/connect-timeout: "30000"
    konghq.com/read-timeout: "1800000"
    konghq.com/write-timeout: "1800000"


# 사설인증서 사용시 추가 설정
## privateCA를 true로 설정
privateCA: true
## 사설인증서 사용을 위한 전처리 작업을 true로 설정
preinstallHook: true
```
