ํ
์ปจํ ์ด๋๋ ๋ฉ์ง๋ค. ์ฒ์์๋ ๋ฐ์ปจํ ์ด๋(์ธ์ ํ๊ธฐ๊ฐ ๋ถ๋๋ฝ์ง๋ง)์์ง๋ง ์ด์ ๋ ์ด ๊ธฐ์ ์ ์ฌ์ฉ์ ์ ์ ์ผ๋ก ์ง์งํฉ๋๋ค. ์ด ๊ธ์ ์ฝ๊ณ ๊ณ์๋ค๋ฉด Docker์ ๋ฐ๋ค๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ํ์ํ๊ณ Kubernetes์ ์ด์ ์ ๊นจ๋ซ๊ณ Helm์ ์ฌ์ฉํ์ฌ ์ถ์ ํจ์ฌ ์ฝ๊ฒ ๋ง๋์ จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ค ๊ฒ๋ค์ ๋ถ๋ช
ํ ํ์ํ ๊ฒ๋ณด๋ค ๋ ์ด๋ ต์ต๋๋ค.
์
๋ฐ์ดํธํ ๋ ๋น๋ฐ์ ์๋์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น?
Kubernetes ๋น๋ฐ์ ์ฝ๋์์ ์ฌ์ฉํ๋ ค๋ ํค/๊ฐ ์์ด ํฌํจ๋ ๋ฆฌ์์ค์ ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฌธ์์ด, ์ด๋ฉ์ผ ๋น๋ฐ๋ฒํธ ๋ฑ์ด ๋ ์ ์์ต๋๋ค. ๋น๋ฐ์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ค์ ์ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ ์ ์์ผ๋ฏ๋ก ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๋ค์ํ ๋ฐฐํฌ๋ฅผ ์ฝ๊ฒ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ํฉ์ ๋ ๋ชจ๋์ด ๊ณตํต ํค๋ฅผ ์ฌ์ฉํ์ฌ ํต์ ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด ํค๋ ํด๋ฌ์คํฐ ๋ด์์ ์ผ๋์ผ ํต์ ์ ์ํ ๊ฒ์ด๋ฏ๋ก ํด๋ฌ์คํฐ ์ธ๋ถ์ ๋๊ตฌ๋ ์ด ํค๋ฅผ ์ ์ ์์ต๋๋ค.
๋น๋ฐ ๋ง๋ค๊ธฐ
์ผ๋ฐ์ ์ผ๋ก Helm์์ ๋น๋ฐ์ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
- ๊ฐ ํ์ผ์ ๋น๋ฐ์ ์ค๋ช ํ์ญ์์ค.
- ๋ฐฐํฌ ์ค์ ์ฌ์ ์ํ์ธ์.
- ๋ฐฐํฌ/ํฌ๋ ๋ด๋ถ์์ ์ด๋ฅผ ์ฐธ์กฐํ์ธ์.
- ... ์ด์ต!
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
apiVersion: v1
kind: Secret
metadata:
name: my-super-awesome-api-key
type: Opaque
stringData:
apiKey: {{ .Values.MyApiKeySecret | quote }}
value.yml์ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฐ๋จํ Kubernetes ๋น๋ฐ
ํ์ง๋ง ๊ฐ ํ์ผ์ ๋น๋ฐ์ ์ง์ ํ๊ณ ์ถ์ง ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฐฐํฌ์ ์ค์น ์ค์ ์์ฑ๋์ด์ผ ํ๋ ๊ณต์ ํค๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์ํ ์ต์ ์ด ์์ต๋๋ค.
์์ ๋ชจ๋ ๊ฐ ํต์ ์์์๋ ๋ฐฐํฌ ์ธ๋ถ์์ ๋น๋ฐ์ ๊ณต์ ํ๋ ๊ฒ์ด ๋ฐ๋์งํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Helm์๋ ๋น๋ฐ์ ์ง์ ์ง์ ํ์ง ์๊ณ ๋ ์๋์ผ๋ก ๋น๋ฐ์ ์์ฑํ๋ ๋ฉ์ปค๋์ฆ์ด ์๋ ๊ฒ์ด ๋งค์ฐ ๋ฐ๋์งํฉ๋๋ค.
ํํฌ
ํํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์น ํ๋ก์ธ์ค ์ค ํน์ ์์น์์ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ค์น ํ์ ์คํํด์ผ ํ๋ ๊ตฌ์ฑ ์์ ์ด ์์ ์๋ ์๊ณ , ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๊ธฐ ์ ์ ์ ๋ฆฌ๋ฅผ ์ํํด์ผ ํ ์๋ ์์ต๋๋ค.
์ค์น ์ค์ ์์ฑ๋ ํค๋ฅผ ์ถ๊ฐํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ฌ์ ์ค์น ํํฌ๊ฐ ์ด์์ ์ ๋๋ค. ํ์ง๋ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ ๋ฐ์ดํธ ์ ๋น๋ฐ์ ์๋์ผ๋ก ์์ฑํ ์๋ ์์ต๋๋ค. Hooks๋ ๋ชจ๋ ์ ๋ฐ์ดํธ์์ ์๋ํฉ๋๋ค.
๋น๋ฐ๊ธ์ ์์ฑํ๋๋ฐ ์์ง ์ฒซ ๋ฒ์งธ ์ค์น๊ฐ ์ด๋ฃจ์ด์ง์ง ์์๋ค๋ฉด ์ฝ๊ธฐ๋ฅผ ์ค๋จํ์ธ์. ์ฌ์ ์ค์น ํํฌ๊ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋น๋ฐ์ด ์ ๋ฐ์ดํธ์ ์ผ๋ถ์ธ ๊ฒฝ์ฐ(์ค์น ๋น์์๋ ์์๋ ์๋ก์ด ๊ธฐ๋ฅ์ผ ์๋ ์์) ํ ๋ฒ๋ง ์๋ํ๋ ์ฌ์ ์ค์น ํํฌ๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ์ ๊ฐ์ค๋ฌ์ด ์ผ์ ๋๋ค.
๊ธฐ๋ฅ
Helm ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ฐฐํฌ ์คํฌ๋ฆฝํธ์ ๋ค์ํ ์คํฌ๋ฆฝํ ์์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
apiVersion: v1
kind: Secret
metadata:
name: my-super-awesome-api-key
type: Opaque
stringData:
apiKey: {{ uuidv4 | quote }} #Generate a new UUID and quote it
์ด ์์์๋ apiKey ๋น๋ฐ ๊ฐ์ด ์ค์น ์ค์ ์์ฑ๋ ์ UUID๊ฐ ๋จ์ ๋ณด์ฌ์ค๋๋ค.
Helm์๋ ๋๋ผ์ด GO ํ ํ๋ฆฟ ๊ธฐ๋ฅ๊ณผ Sprig์ ๊ธฐ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ๋ฐฐํฌ๋ฅผ ์์ฑํ๋ ๋งค์ฐ ๊ด๋ฒ์ํ ๊ธฐ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์กฐํ ๊ธฐ๋ฅ
ํฌ๋ฆ 3.1์ ์ถ๊ฐ๋จ
- ์์์ ์กด์ฌ๋ฅผ ํ์ธํ์ญ์์ค.
- ๋์ค์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ธฐ์กด ๋ฆฌ์์ค์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ด ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ชจ๋ ์ฌ์ฉํ๋ฉด ๋์ ์ผ๋ก ์์ฑ๋ ์ผํ์ฑ ๋ณด์ ๋น๋ฐ์ ๋ง๋ค ์ ์์ต๋๋ค!
# 1. ะะฐะฟัะพัะธัั ัััะตััะฒะพะฒะฐะฝะธะต ัะตะบัะตัะฐ ะธ ะฒะตัะฝััั ะฒ ะฟะตัะตะผะตะฝะฝะพะน $secret
{{- $secret := (lookup "v1" "Secret" .Release.Namespace "some-awesome-secret" -}}
apiVersion: v1
kind: Secret
metadata:
name: some-awesome-secret
type: Opaque
# 2. ะัะปะธ ัะตะบัะตั ัััะตััะฒัะตั, ะฒะทััั ะตะณะพ ะทะฝะฐัะตะฝะธะต ะบะฐะบ apiKey (ัะตะบัะตั ะธัะฟะพะปัะทัะตั ะบะพะดะธัะพะฒะฐะฝะธะต Base64, ัะฐะบ ััะพ ะธัะฟะพะปัะทัะนัะต ะบะปัั "data")
{{ if $secret -}}
data:
apiKey: {{ $secret.data.apiKey }}
# 3. ะัะปะธ ัะตะบัะตั ะฝะต ัััะตััะฒัะตั โ ัะพะทะดะฐัั ะตะณะพ (ะฒ ััะพั ัะฐะท ะธัะฟะพะปัะทัะนัะต "stringData", ัะฐะบ ะบะฐะบ ะฑัะดะตั ะพะฑััะฝะพะต ะทะฝะฐัะตะฝะธะต)!
{{ else -}}
stringData:
apiKey: {{ uuidv4 | quote }}
{{ end }}
์ ์ ๋ฐ์ดํธ๊ฐ ์๋ฒ์ ์ ์ฉ๋ ๋๋ง๋ค Helm์ ์ ๋น๋ฐ ๊ฐ์ ์์ฑํ๊ฑฐ๋(์์ง ๋น๋ฐ์ด ์๋ ๊ฒฝ์ฐ) ๊ธฐ์กด ๊ฐ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
ํ์ด์ ๋น๋๋ค!
์ฃผ์ ์ ๋ํด ๋ ์ฝ์ ๋ด์ฉ:
Kubernetes์ ์ธ ๊ฐ์ง ์์ค์ ์๋ ํ์ฅ ๋ฐ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ .๊ตฌํ์ ์ํ ํ ํ๋ฆฟ์ ๊ฐ์ถ ๋ถ๋ฒ ๋ณต์ ์ ์ ์ Kubernetes .Telegram์ Kubernetes ์ฃผ๋ณ ์ฑ๋ .
์ถ์ฒ : habr.com