การสรา้ง Helm Repository โดยใช้ GitHub Page
Tags: github, helm
Published: 2023-06-12 11:31:40

Helm กำลังกลายเป็นตัวเลือกยอดนิยมในการจัดการแอปพลิเคชัน Kubernetes

## Helm และ Helm chart repository คืออะไร

Helm ความหมายอย่างเป็นทางการคือ "ผู้จัดการแพ็คเกจสำหรับ Kubernetes"
Helm ช่วยให้การติดตั้ง application บน Kubernetes เป็นไปอย่างง่ายดายในขั้นตอนการเผยแพร่ นอกจากนี้สามารถจัดการตัวแปรผ่านไฟล์ Kubernetes manifest YAML
เมื่อเราสร้าง chart ในการติดตั้ง Kubernetes application และต้องการแชร์ให้ผู้อื่นใช้งานได้ วิธีที่ง่ายที่สุดคือ upload ไปยัง Helm chart repository ตัว Helm chart repository จะทำหน้าที่เก็บบันทึก และแชร์แพ็คเกจ โดยทำงานเหมือน HTTP เซริฟเวิอร์ น่าเสียดายที่ Helm ไม่มีเครื่องมือเฉพาะในการ upload chart ไปยัง remote chart repository (Helm รองรับ local repository)
โดยเราจะใช้ประโยชน์จาก Github Pages ในการแชร์ Chart ที่เราสร้างขึ้นมา
##  Github Pages คือ
GitHub Pages เป็นบริการจาก Github สำหรับวางเว็บไซด์แบบ static โดยมันเข้ากันกับวัตถุประสงค์ของเราเนื่องจากทุกสิ่งที่เราต้องการคือการโฮสต์ไฟล์ index.yaml ไฟล์เดียวพร้อมกับไฟล์ .tgz จำนวนมาก แล้วทำไมไม่โฮสต์สิ่งเหล่านี้ในเว็บเซิร์ฟเวอร์ของคุณเอง มันช่วยลดค่าใช้จ่ายในการดำเนินการและความเสี่ยงของคุณ (ลองนึกถึงการตรวจสอบ การจัดการแพตช์ ความปลอดภัย บริการสำรองข้อมูล...) คุณจึงสามารถเน้นไปที่โค้ดและสิ่งที่ทำให้ธุรกิจของคุณเกี่ยวข้องกับลูกค้าของคุณ

## ขั้นตอนการสร้าง helm repository

> ตามตัวอย่างจะเป็นการเป็นการสร้าง Helm chart repository แบบ public

###การตั้งค่าที่ Repository ที่ Github
1.ไปที่เว็บ https://github.com/{ชื่อผู้ใช้งาน}
2.ที่หน้าเว็บของ github เลือกที่แท็บ Repositories จากนั้นคลิกที่ปุ่ม New repository

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q24sa0g9m6rgrfe6kxs2.png)
3.ในหน้า Create a new repositoryให้กำหนดชื่อ repository ที่เก็บ helm chart (กำหนดเป็น helm-chart) กำหนดการเข้าถึงเป็นแบบ public จากนั้นคลิกที่ปุ่ม Create repository 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d1t95zo7am869z4u3ucd.png)

###การตั้งค่าที่ฝั่งผู้ใช้งาน
หลังจากสร้าง repository บน GitHub แล้วมันยังเป็น repository ว่างๆ อยู่ยังไม่สามารถเผยแพร่บน github page ได้ขั้นตอนนี้จะเป็นการ

1.clone repository ผ่านคำสั่ง

```
$git clone {file .git ที่กำหนด repository ที่สรา้งขึ้น}
```

2.เข้าไปใน folder ที่เก็บ code

```
$cd helm-chart
```

3.สร้างไฟล์ **robots.txt** เพื่อหลีกเลี่ยง bot ในการเก็บข้อมูลภายใน repository โดยกำหนดข้อมูลในไฟล์ robots.txt ผ่านคำสั่ง

```
$ echo -e “User-Agent: *\nDisallow: /” > robots.txt
```
4.ต่อไปจะเป็นการาสรา้งพื้นทืี่เก็บข้อมูล chart ของ helm ชื่อ source และทดสอบการสร้าง helm chart (บนเครื่องผู้ใช้งานจะต้องมีการติดตั้ง helm CLI ลง)ผ่านคำสั่ง

```
$ mkdir source && cd source
```
5.สร้าง Helm Chart ชื่อ demo ใหม่ผ่านคำสั่ง

```
$helm create source/demo
``` 
6.ใช้คำสั่ง **helm lint** ในการตรวจสอบรูปแบบ ของ chart ว่าอยู่ในรูปแบบที่ดี

```
$helm lint sources/*
```
7.สร้างแพ็คเกจของ Helm chart ผ่านคำสั่ง

```
$helm package source/demo
```
8.การทำดัชนีของ Helm chart repository อ้างจากข้อมูลของ Helm

> ใน repository จะมีไฟล์พิเศษที่ชื่อ index.yaml ซึ่งมีรายการของแพ็กเกจทั้งหมดที่จัดเตรียมพร้อมด้วย meta data ที่อนุญาตให้เรียกค้นและตรวจสอบแพ็กเกจเหล่านั้น
ดังนั้นต้องมีการสร้างไฟล์index.yaml ผ่านคำสั่ง

```
$helm repo index --url {ชื่อ repository ที่สร้างสำหรับเก็บ Helm chart ไว้} .
$ cat index.yaml 
apiVersion: v1
entries:
  demo:
  - apiVersion: v2
    appVersion: 1.16.0
    created: "2023-06-12T11:35:20.297558+07:00"
    description: A Helm chart for Kubernetes
    digest: f172cc0de7f5e6de24b18d46bc353e1dc582f8a9ea1b5a7b76cf1aaf0d9f2acf
    name: demo
    type: application
    urls:
    - https://github.com/iconnext/helm-chart/demo-0.1.0.tgz
    version: 0.1.0
generated: "2023-06-12T11:35:20.297041+07:00"

```
9.push ข้อมูลทั้งหมดขึ้น github

```
$ git add . && git commit -m "Initial commit" && git push origin master
```

###การกำหนด Helm chart repository เป็น github page

1.ไปยังหน้าของ repository ที่สร้างไว้จากนั้นคลิกที่ แท็บ settings

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m3rpklluqk7lu2hrn9fg.png)

2.ที่หน้า General เมนูทางซ้ายมือให้เลือกที่ Pages

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yur2fnqvm0lptb6fzeal.png)

3.ที่หน้า GitHub Pages ที่ Source เลือกที่ Deploy from a branch และที่ branch เลือก main จากนั้นคลิกที่ปุ่ม Save

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wo2ydknidac24gjh388w.png)

###ทดสอบการใช้งาน  Helm chart ###
1.เมื่อต้องการนำchart ที่เราสร้างขึ้นมาไปใช้ต้องทำการเพิ่ม repository ทีเราสร้างขึ้นบน เครื่องที่ติดตั้ง Helm Client ผ่านคำสั่ง
```
$ helm repo add connect https://iconnext.github.io/helm-chart/

```
2.ตรวจสอบว่ามีการเพิ่ม chart repository ผ่าน Helm Client โดยใช้คำสั่ง
```
$helm repo list
NAME      	URL                                           
t3n       	https://storage.googleapis.com/t3n-helm-charts
truecharts	https://charts.truecharts.org/                
bitnami   	https://charts.bitnami.com/bitnami            
chatwoot  	https://chatwoot.github.io/charts             
iconnext  	https://iconnext.github.io/helm-chart/  
```

ตอนนี้เราสามารถสรา้ง Helm Chart เพื่อให้สามารถ deploy Kubernetes Application บนเครื่องไหนก็ได้ผ่าน  Github Pages