# 20201201 kubernetes (一)

## 課堂資料

{% embed url="<https://blog.tomy168.com/2019/08/centos-76-kubernetes.html>" %}

{% embed url="<https://kubernetes.io/docs/tutorials/kubernetes-basics/>" %}

### 安裝 Kubernetes

#### 所有機器安裝步驟

> 環境下加裝常用工具

```
yum install wget net-tools nano -y
```

{% tabs %}
{% tab title="vm1" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS4n2_y8Y2ljuiKzZi%2Fimage.png?alt=media\&token=9182a1b8-3b3a-4392-992f-89569ddf3c88)
{% endtab %}

{% tab title="vm2" %}

{% endtab %}

{% tab title="vm3" %}

{% endtab %}
{% endtabs %}

> 為叢集設置主機名稱以便 nodes 間的相互溝通，XXX 分別對應自己的角色 Hostname

```
hostnamectl set-hostname XXX
```

```
vim /etc/hosts
```

{% tabs %}
{% tab title="vm1" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSSHLnDG66E6AP0fs2%2Fimage.png?alt=media\&token=1997332d-314b-422f-b702-b71306b2de76)
{% endtab %}

{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSSTBKufOcvKCtCp5X%2Fimage.png?alt=media\&token=de3fdc74-0573-484a-98e6-7e956884df07)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSSddVrnAl5fIEn7zP%2Fimage.png?alt=media\&token=c6e230b9-207d-4995-8909-4be31d3beade)
{% endtab %}
{% endtabs %}

> 禁用 Selinux 與 swap，
>
> kubernetes 基於性能理由建議關閉 swap、更改 fstab 檔案註解 swap 分區以避免重開機後再次作用

```
setenforce 0
```

```
sed -i 's@SELINUX=enforcing@SELINUX=disabled@' /etc/sysconfig/selinux
```

```
vim /etc/fstab
```

{% tabs %}
{% tab title="vm1" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS3uHASLsOkmSNYAa9%2Fimage.png?alt=media\&token=a5fd49b9-27fb-481a-b909-bd9f65371de7)

> 註解swap只留下UUID

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS3eJxEPseRbLCMy8s%2Fimage.png?alt=media\&token=7a3500ec-6b9b-4572-8a4d-8919bf5d7508)
{% endtab %}

{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS5JGcHh_0gU2cDwHK%2Fimage.png?alt=media\&token=351f3d98-6ed5-49f5-8d2e-dd03e6073d0f)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS52sjLCzHPl_lUxli%2Fimage.png?alt=media\&token=e705f860-4687-4370-8c73-5752c1f1966a)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS6cfIkrg1e0m83lT4%2Fimage.png?alt=media\&token=9ff85e3f-82e3-4eb1-b770-014d22a6b163)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS6NgtDpZ9Nm0fKXJF%2Fimage.png?alt=media\&token=3d678aa5-9942-4b03-a83f-3b020432348b)
{% endtab %}
{% endtabs %}

{% hint style="danger" %}
註解 swap 後須重新開機並使用`free`檢查swap是否關閉
{% endhint %}

> ptables相關功能或模組的啟用與停用，後續kubernetes會接手管理這部分的網路功能

```
systemctl disable firewalld && systemctl stop firewalld
```

```
echo 1 > /proc/sys/net/ipv4/ip_forward
```

```
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
```

```
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
```

```
modprobe br_netfilter
```

```
echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf
```

```
sysctl -p
```

```
lsmod | grep br_netfilter
```

{% tabs %}
{% tab title="vm1" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS860Co4NnK0MtJ1Xf%2Fimage.png?alt=media\&token=3cdad8c3-7276-4be9-ba4f-da6df05fc7c8)
{% endtab %}

{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS8ILBZsKg7k2WKoBp%2Fimage.png?alt=media\&token=0a4302c6-8ed4-4c8c-90ab-521372b083ac)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNS8v86FJddLabQLVV8%2Fimage.png?alt=media\&token=1a508cb1-b6fa-47db-bd44-4e2dd26e7464)
{% endtab %}
{% endtabs %}

> 添加 docker-ce 與 kubernetes 的 yum 源、並重整 yum 倉庫

```
yum install -y yum-utils device-mapper-persistent-data lvm2
```

```
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

```
vim /etc/yum.repos.d/kubernetes.repo
```

{% hint style="warning" %}
進入編輯後輸入以下文檔

```
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
```

{% endhint %}

{% tabs %}
{% tab title="vm1" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSB94NFjac4r3gTsSJ%2Fimage.png?alt=media\&token=50e1f99f-ac29-47af-b793-9a1b45e140a8)
{% endtab %}

{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSBqix8R27P0MtqPho%2Fimage.png?alt=media\&token=ba7ec416-2cae-4dda-b324-97af92fca521)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSCn2jW8FK-SCsnLjm%2Fimage.png?alt=media\&token=ff444c82-3931-4a99-98c7-96b48e1b6ce6)
{% endtab %}
{% endtabs %}

```
yum clean all && yum repolist
```

{% tabs %}
{% tab title="vm1" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSE8vCGFzGxBVfeWhw%2Fimage.png?alt=media\&token=a2d7c886-7ce4-4843-86a5-34af6e6bb522)
{% endtab %}

{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSE_ReBPWmGhWhPYwZ%2Fimage.png?alt=media\&token=09b93a3d-92de-445e-a96e-f2a5d0814aed)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSEutlACsdjNpZKG3J%2Fimage.png?alt=media\&token=099ca0df-9688-4fd0-8c02-0a941fbc1122)
{% endtab %}
{% endtabs %}

> 安裝 docker-ce 與 kubernetes、指定套件的安裝版本並設置為開機啟動

```
yum install docker-ce-18.09.8 --nogpgcheck
```

```
systemctl enable docker && systemctl start docker
```

```
yum install kubelet-1.15.2 kubectl-1.15.2 kubeadm-1.15.2 --nogpgcheck --disableexcludes=kubernetes
```

```
systemctl enable kubelet.service
```

{% tabs %}
{% tab title="vm1" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSJ2aEvwJJTEE1RJXg%2Fimage.png?alt=media\&token=4c1a95ce-e3d3-49b1-bb62-9e95913a77c0)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSMLhe7CATWenVjujA%2Fimage.png?alt=media\&token=d07c9b1b-7689-4ac3-be18-b79f6af86fdb)
{% endtab %}

{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSJdrYEpHfs7tJ5Zce%2Fimage.png?alt=media\&token=b37f1eff-bc01-4bc0-9310-f709c1e924bf)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSL5y3_KJAfXzkk-P7%2Fimage.png?alt=media\&token=09d6d6ea-ad9f-49f6-bfdf-d6fbc65c95b8)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSKizD__TqQTf_GS2S%2Fimage.png?alt=media\&token=1aa83f0c-dabc-4c34-aaf4-a724644710a6)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNS110kFbF_p0nEJKe9%2F-MNSLGOdj40zgWnDeYk6%2Fimage.png?alt=media\&token=66e02e64-24de-408e-8b16-7f7d64b981e6)
{% endtab %}
{% endtabs %}

#### Master機器初始化：以vm1 為Master

> 初始化 master，api-server-advertise 指定為 master 的內部 IP，pod-network-cidr 與 service-cidr 都採預設值，也可以變更為其他

```
kubeadm init --apiserver-advertise-address=[ master IP ] --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --kubernetes-version=v1.15.2 --cri-socket="/var/run/dockershim.sock"
```

{% hint style="info" %}
紅字的前三行是在說明作為 master 角色還需手動輸入提示的指令，才能順利運作這個叢集，而最下方的kubeadm 範例則是提示 worker nodes 欲加入叢集所需輸入的指令

```
mkdir -p $HOME/.kube
```

```
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
```

```
chown $(id -u):$(id -g) $HOME/.kube/config
```

{% endhint %}

> &#x20;安裝通用的 flannel容器網路介面CNI（Container Network Interface）元件

```
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
```

{% hint style="danger" %}
Then you can join any number of worker nodes by running the following on each as root：

```
kubeadm join 192.168.8.129:6443 --token e09bz5.lwdqen1ezp4wif1a \
    --discovery-token-ca-cert-hash sha256:982152b77b1cd7e7104d8cc15527020238c9654832c34014540c4f581cab34d0 
```

將結果複製去 vm2、vm3
{% endhint %}

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSNtYlYXuOr7OzePjH%2Fimage.png?alt=media\&token=ae5ae1dc-8421-40fe-8bd0-2c0fbf27f424)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSOFU6U3mqPYKrD9B-%2Fimage.png?alt=media\&token=69802f81-9dcd-4d58-8bfc-ce6e1fd71e06)

{% tabs %}
{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSPC63fJsm3QeFb6yu%2Fimage.png?alt=media\&token=1f894cd2-f933-40c1-b980-8fc32ec7a823)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSPHqQDUoG0HcpLnRS%2Fimage.png?alt=media\&token=b57821a6-4b08-4e2d-a375-6b5fd59ab561)
{% endtab %}
{% endtabs %}

```
cd k8s
```

```
kubectl get nodes
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSPWTts_ixQEjK4yng%2Fimage.png?alt=media\&token=f551d54e-4ea2-412e-8b6a-65d81c75c9c4)

```
kubectl create deployment httpd-app --image=httpd
```

```
kubectl expose deployment httpd-app --type=NodePort --name=httpd-service --port=80
```

```
kubectl get svc
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSPlUTwe7A7RJAngWV%2Fimage.png?alt=media\&token=a1f72a72-19eb-4ad4-99b6-e58642eaaedc)

{% hint style="danger" %}
檢查是否連接：`IP 位址:[ httpd-service's port(s) ]`
{% endhint %}

{% tabs %}
{% tab title="vm1" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSQ7Oi7r8rWk_Tqkal%2Fimage.png?alt=media\&token=04c16740-223b-46e1-9eeb-8a1867b3608c)
{% endtab %}

{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSQGfehxR_xarTgKI_%2Fimage.png?alt=media\&token=03675701-a7e0-4647-952c-8baca9499992)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MORu7xfMnImVhn9-2E9%2F-MOSQfYse5q9vRKva2lp%2Fimage.png?alt=media\&token=03b025e5-6764-4892-94da-1369caad5211)
{% endtab %}
{% endtabs %}

{% hint style="danger" %}
初始化k8s

```
kubeadm reset
```

{% endhint %}

```
kubectl describe node [ master ]
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSV_l31FLsaTxFLWco%2Fimage.png?alt=media\&token=151af7f0-8992-49d7-b778-ff6f238dbf75)

```
kubectl get deployment
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSWtq2W69SqT8TAzZ9%2Fimage.png?alt=media\&token=8e324f7c-ba45-4457-82c8-6abd6bff1939)

```
kubectl scale deployment httpd-app --replicas 2
```

```
kubectl get deployment
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSXzGeoSAuxAXn6equ%2Fimage.png?alt=media\&token=1dcba758-1fc5-4236-bba2-f5b04fde7ecc)

```
kubectl create deployment web1 --image=httpd
```

```
kubectl get deployment
```

```
kubectl describe deployment web1
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSZ_fX8j8uvLv3KoFO%2Fimage.png?alt=media\&token=2c8c9f8a-834e-48c8-99bd-694e3d8f0bfb)

```
kubectl create deployment web2 --image=http1d
```

```
kubectl get deployment
```

```
kubectl describe deployment web1
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSZrO6nL60n95DDYde%2Fimage.png?alt=media\&token=1f634ec4-82e8-4aeb-8d12-d4db1b087475)

```
kubectl get pod
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOS_MSLwyXGT8GPJGtn%2Fimage.png?alt=media\&token=1e5326c7-d65c-471f-8e22-f1ffc97c939b)

```
kubectl describe pod web2-d9b9cf459-flh2r
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOS_n2893VIOGE6xiCu%2Fimage.png?alt=media\&token=ce945b62-59c8-468d-a4d0-f7e040d60981)

```
kubectl delete deployment web2
```

```
kubectl get deployment
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSaDqX5jINIxadp-MM%2Fimage.png?alt=media\&token=ce67e7e0-40e9-4274-a888-366bcd6c5892)

```
kubectl get pod
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSaPyW-yJEbRATkbYp%2Fimage.png?alt=media\&token=575da32e-48e6-499e-a51d-58f0d1a9b996)

```
kubectl get deployment
```

```
kubectl get deployment web1 -o yaml
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSba-OdDpGpl6qqeSy%2Fimage.png?alt=media\&token=e0a60c1f-1fbd-48ad-84d4-0e9ee9cc2a42)

```
kubectl get deployment web1 -o yaml > myweb.yml
```

```
gedit myweb.yml &
```

```
kubectl apply -f myweb.yml
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSebzeFxPyffuV62Xo%2Fimage.png?alt=media\&token=d8b8b2b3-5e5c-4dbf-aa70-a92d7e318e41)

```
kubectl get deployment
```

```
kubectl get pod
```

```
kubectl get pod -o wide
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSf-rsHzzSN4eMVrpm%2Fimage.png?alt=media\&token=53fddc8e-6c03-4c79-b91b-b7e677714be0)

```
curl 10.244.1.3
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOSS1XtNDqSHMUIp7W9%2F-MOSg7I0cr2AwWpNq-Xf%2Fimage.png?alt=media\&token=93a41ac9-49b7-4b53-9524-ccd9a9202ffe)
