2024年的第一週就讓我驚嚇~去年才PO文說到Okteto可以免費託管k8s服務,結果不到半年,就公告此免費服務只提供到2024/1/15。挖哩勒,接受到通知後能把服務移出只有短短的兩週。以下分享一下後來是移轉到哪一家k8s的託管服務商,並使用心得。
其實去年在使用Okteto就感覺怕怕的,沒想到來的那麼快,💰那麼快就燒完了。當初我就覺得它的SaaS服務怎麼藏得那麼深。並且服務限縮越來越大。其實心裡早就盤算這天會到來,只是讓我驚嚇的。是我收到公告到我能移出服務只有兩週,只好趕快尋找一家合適的服務商搬遷摟。
我想大家應該都聽過三大雲服務商(GCP, Azure, AWS)
但老子就是窮,用不起這些大型雲端服務商。 於是就往這三家間小服務做選擇:Digital Ocean, Linode, Vultr。
不拖泥帶水,直接說後來我選的是Vultr,簡單的說一下後來為什麼選擇Vultr。
- 價錢方面:它可選更便宜node (5$/node),因為不是選VM,若以後資源不夠再多買幾個node就好了。
- 機房位子:它可選擇的機房有日本。
- 使用者介面:因為以前就使用過,雖介面陽春,但簡潔易懂。
其實本來想說藉這機會用用看Digital Ocean,但最後是因為官網價錢說明的不是很清楚,且要重新註冊…Vultr之前2016年就買過他們家VM服務,2020推出了k8s託管服務,想說再給他們一次機會,再加上時間壓力。於是,就馬上儲值試用看看。搬過去之前,我要再三提醒。請勿務必瞭解k8s的使用喔。因為它跟Okteto差異是非常大的喔。以下先說明一下前置作業。
Prework 1:
下載KubeConfig:
Products > Kubernetes > 點選你的cluster > Download Configuration
Prework 2:
匯入至你的.kube目錄並export:
mv vke-xxx-xxx-xxx.yaml ~/.kube/configs
export KUBECONFIG=~/.kube/config$(find ~/.kube/configs -type f 2>/dev/null | xargs -I % echo -n ":%")
kubectl get nodes //測試看看可以不可看到nodes
以上大致完成前置作業。接下來就是搬移的主要步驟了。
STEP 1:
安裝nginx ingress
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace
STEP 2:
安裝cert manager
helm repo add jetstack https://charts.jetstack.io
helm install \ ─╯
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.13.3 \
--set installCRDs=true
STEP 3:
部署服務
將你的服務打包成Container,並部署至k8s。以下用nginx為範例。
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
namespace: test
spec:
replicas: 1
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello-world
namespace: test
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: hello-world
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-hello-world
namespace: test
spec:
ingressClassName: nginx
rules:
- host: test.shawnyin.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-world
port:
number: 80
這邊你可以看到我們使用了Ingress來露出服務給外部使用,當你這樣使用服務商會自動幫你建置一個外部的Load Balancer,並長出一個對外IP。記得這服務是另為收費的喔,一個instance一個月是$10。後續的domain就是用這IP來對映。
kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.100.43.213 XXX.XXX.XXX.XXX 80:31583/TCP,443:30099/TCP 4d17h
以上那個EXTERNAL-IP就是對外IP,請把它記下來。
SETP 4:
設定Domain 這時候請到你的域名服務商去設定對應的IP,我這邊是使用CloudFlare託管DNS。新增一個A Record,Name就是你的subdomain name,Content就是你的IP位址。設定大致如下圖:
(CloudFlare設定重點,記得使用DNS only,如果用Proxy模式Vultr還需要設定防火牆)
設定完後你可以用Domain name去打打看,看能不能連到nginx首頁。如果有出現下圖那就恭喜你成功了!
SETP 5:
設定SSL
這邊使用Cert manager + CloudFlare,可以參考官網文件說明,在此簡單說明。先去CloudFlare新增一組API Token。權限設置如下圖:
在k8s cluster中新增一個Secret來存放剛剛新增的token。
kubectl create secret generic cloudflare-api-token-secret --from-literal=api-token=XXXX -n cert-manager
設定Cert manager的ClusterIssuer和Certificate
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-dns01
namespace: cert-manager
spec:
acme:
privateKeySecretRef:
name: letsencrypt-dns01
server: https://acme-v02.api.letsencrypt.org/directory
solvers:
- dns01:
cloudflare:
email: xxx@shawnyin.com
apiTokenSecretRef:
key: api-token
name: cloudflare-api-token-secret
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-todoit-tech
namespace: cert-manager
spec:
dnsNames:
- "*.shawnyin.com"
issuerRef:
kind: ClusterIssuer
name: letsencrypt-dns01
secretName: wildcard-letsencrypt-tls
改一下之前部署的ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-hello-world
namespace: test
annotations:
cert-manager.io/cluster-issuer: letsencrypt-dns01
spec:
ingressClassName: nginx
tls:
- hosts:
- test.shawnyin.com
secretName: test-letsencrypt-tls
rules:
- host: test.shawnyin.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-world
port:
number: 80
測試一下SSL是否Vaild
kubectl get certificate -w -A
等待一下。如果Ready是TRUE那就表示SSL憑證簽署成功。你可以在連到nginx的首頁,就會發現已經有https摟~
我想先說到這裡,其實還又很多眉眉角角(打包服務上傳至Private Container Registry等等…),以後有機會再跟大家分享,這邊總結一下使用心得:
先說優點:
- 簡單易用,基本上只要熟悉k8s就沒問題
- 費用算是便宜
最後說說缺點:
- 服務商名字不會念,難以記憶…是在搞人嗎?
- Node的使用率不明確,用k9s不能監控,只能進到vm裡面去看,有可能被糊弄
- 許多官方文件說明不清,並且破圖一堆…
- 老客戶盡然沒有任何優惠(拜託使用者黏性要顧啊)
小小總結,以後真的有機會還是想試試Digital Ocean
若是我的分享對你有幫助,你也想試用看看Vultr,可以使用我的推薦連結試用,新用戶還有許多優惠喔~