Home
- Details
- Written by: sam
- Category: 電腦相關
- Hits: 11
正好最近新弄,記一下流程
curl -sfL https://get.k3s.io | sh -
~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
chunk01 Ready control-plane 19s v1.36.3+k3s1
cat /var/lib/rancher/k3s/server/node-token
記下上面的token,目前master就完成了
到其它worker執行指令
curl -sfL https://get.k3s.io | K3S_URL=https://1.2.3.4:6443 K3S_TOKEN=K10b0c5b2cd2f5fbbeca19ee4c0fb3b9dc20d8511a9f16b23a90100daf856eadd55::server:12b6247168b4ce1122d27925fa03e41f sh -s - agent
記得替換成你的token和剛剛先前裝好的master ip
如果你不小心裝了但沒成功指定後面的參數,它就會自己成為master,使用以下指令移除
再來裝ARGO
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
有錯誤,但它是可以直接強制的
"The CustomResourceDefinition "applicationsets.argoproj.io" is invalid: metadata.annotations: Too long: may not be more than 262144 bytes"
k3s kubectl apply --server-side --force-conflicts -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
稍待一下檢查
kubectl get pods -n argocd
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 95s
argocd-applicationset-controller-579c4c54b8-k4pwj 1/1 Running 0 95s
argocd-dex-server-744c5d4467-9h6hv 1/1 Running 0 95s
argocd-notifications-controller-dd4ff84c-wdxtz 1/1 Running 0 95s
argocd-redis-84497fb7c5-zmx9b 1/1 Running 0 95s
argocd-repo-server-5f46d9f598-9r6j9 1/1 Running 0 95s
argocd-server-7f4549bb69-cbdxp 1/1 Running 0 95s
這樣就是有成功了
再來是給它打個洞(因為是展示機,就直接打洞,請視情況
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort", "ports": [{"port": 80, "targetPort": 8080, "nodePort": 32080}, {"port": 443, "targetPort": 8081, "nodePort": 32443}]}}'
這樣外部就可以連32443
再來找出密碼
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
Zq9grs98xILBU1ZY <--
然後打開browser,輸入你的IP和PORT號,帳號是"admin" 然後剛剛的"密碼",就能正常登入了

再來做點簡單的應用走一下流程。
[寫好 Node.js] ──> [推送到 Git] ──> [GitHub Actions 打包] ──> [推送到 Registry (ECR/ACR)] │
│
[K8s 運行中] <── [ArgoCD 自動拉取] <── [更新 Git 裡的 YAML/Kustomize] <───────
所以以上面正常流程,需要準備Github, Docker Hub 兩邊帳號或是自架替代
Github 建立兩個專案,請看my-node-app my-app-infra
兩個都照抄就行了,但要改
回到原本放 Node.js 原始碼(有 Dockerfile)的那個 Git 倉庫。
設定密鑰 (Secrets)到 GitHub 專案的 Settings -> Secrets and variables -> Actions
新增三個密鑰:DOCKERHUB_USERNAME: 您的 Docker Hub 帳號。
DOCKERHUB_TOKEN: 您的 Docker Hub 密碼或 Access Token。
INFRA_REPO_TOKEN: 一組具備寫入權限的 GitHub Personal Access Token (PAT),讓機器人可以跨倉庫去修改 my-app-infra 的檔案。
至於node的測試檔和打包都也是現成的
/.github/workflows/deploy.yml
overlays/prod/kustomization.yaml
記得都要全部替換成你的Docker Hub and Github的。
再來檢查
- 第一個倉庫:
my-node-app(放寫好的 Node.js 程式)- 把剛才做好的
server.js、package.json、Dockerfile推送上來。 - 先不要加
.github/workflows/deploy.yml,我們等一下設定完密鑰再放。
- 把剛才做好的
- 第二個倉庫:
my-app-infra(專門放 K8s 設定檔)- 這個倉庫非常重要。請在裡面建立我上一回提供的 Kustomize 結構檔案(也就是
base/目錄與overlays/目錄那 4 個 YAML 檔)。 - 請確保裡面的帳號都已經是您的
kelvin666888111/nodejs-app
- 這個倉庫非常重要。請在裡面建立我上一回提供的 Kustomize 結構檔案(也就是
- 點擊 GitHub 右上角頭像 -> Settings -> 左側最下方 Developer Settings。
- 選擇 Personal access tokens -> Tokens (classic)。
- 點擊 Generate new token (classic)。
- Note 輸入:
k8s-gitops-token。 - Scopes(權限):勾選
repo全套權限(這樣機器人才能幫你推程式碼)。 - 點擊最下方生成,把那串以
ghp_開頭的超長密鑰複製下來(它只會出現一次!)。
my-node-app (Node.js) 的 GitHub 倉庫網頁。- 點擊功能表的 Settings -> 左側 Secrets and variables -> Actions。
- 點擊 New repository secret,依序建立三個鑰匙:
- 名稱:
DOCKERHUB_USERNAME/ 內容:kelvin666888 - 名稱:
DOCKERHUB_TOKEN/ 內容:(您的 Docker Hub 密碼) - 名稱:
INFRA_REPO_TOKEN/ 內容:(剛才步驟二複製的ghp_...超長密鑰)
- 名稱:
- 正式啟動:
- 在本地的 Node.js 專案中,補上
.github/workflows/deploy.yml檔案。 - 將它
git commit並git push到 GitHub。 - 這時去 GitHub 網頁的 Actions 分頁,您就會看到一個藍色(或綠色)的轉圈圈正在進行自動打包與推播!
- 在本地的 Node.js 專案中,補上

Docker hub 權限要給R&W,因為要PUSH Image上去!
最後就是打開ARGO
+ NEW APP 按鈕,右側會彈出一個設定選單,請依序填入以下內容:
- Application Name:
my-nodejs-app(自己取名) - Project Name:
default - Sync Policy: 建議先選
Manual(手動),等熟練了再改Automatic, 等下可以方便測試
- Repository URL: 貼上您建立的
my-app-infra(Infra 倉) 的 GitHub 公開網址。 - Revision: 填寫
HEAD或main。 - Path: 填寫
overlays/prod(告訴 ArgoCD 我們要跑生產環境的 Kustomize 配置)。
- Cluster URL: 下拉選單直接選
https://default.svc(代表部署在目前的 K3s 本地叢集)。 - Namespace: 填寫
default。
- 填完後,點擊最上方的
CREATE按鈕。 - 畫面上會出現一個顯示為
OutOfSync的卡片。大膽點擊卡片上的SYNC按鈕,然後點SYNCHRONIZE執行!
最後就是打開網站,就能見到

然後來測試,請修改程式碼,然後commit,推上Git
它現在是正常"綠"色,會變成"橘"色的,這時可以手動按一下同步,它就會自動更新上去。
更新後仔細看"Rev.?" 是會自動變化的
再來,如果有了改壞,但已怖署了,該怎麼回滾? GitOps
最快的方法是再到Git上回滾,這是最好的,因為可以留下記錄
- 回到您的
my-app-infra(K8s 設定檔倉庫)。 - 點進
overlays/prod/kustomization.yaml。 - 點擊編輯,把
newTag:後面那串 V2 的 Git SHA 亂碼,手動改回上一版 V1 的 Git SHA 亂碼,然後 Commit 儲存。 - 回到 ArgoCD 網頁:ArgoCD 會立刻發現「Git 上的版本」與「目前 K8s 跑的版本」不一樣,畫面再次亮起黃色的
OutOfSync。 - 點擊 SYNC:K8s 就會啟動滾動更新,安全地把 V2 容器停掉,無縫換回 V1 容器。
第二個是直接在ARGO上面點"HISTORY AND ROLLBACK",它也能馬上解決,但最終還是得回到Git去修改,留下記錄。
再說一下為什麼直接改,因為要快點滅火,在有發現的前提下,當然正確來說,在上新之前的QA應該早就發現了,只是常有萬一……
my-node-app(Node 倉)用 Git 倒退(Reset/Revert)然後 Push 呢?」- 作法 1:去
my-app-infra修改並 Push(剛剛介紹的方法 A)- 特點:速度最快。因為 V1 的 Image 之前早就打包好存在 Docker Hub 了,我們直接改 Infra 倉的 YAML 標籤 [4],地端 K8s 就能在 10 秒內直接拉下現成的舊 Image 換上去。
- 作法 2:去
my-node-app執行git revert並 Push- 特點:會重新觸發 GitHub Actions 流程。機器人會把舊程式碼「重新包成一個全新名稱的 V3 映像檔(雖然內容跟 V1 一樣)」,再自動 Push 到 Docker Hub、自動改寫 Infra 倉。
- 缺點:要重新經歷一次 Docker 打包與推播,速度比較慢(需要 1~2 分鐘),不適合緊急救火。
測試後,就可以改成自動SYNC了。只要一有commit 就能自動跑完全程。
- Details
- Written by: sam
- Category: 電腦相關
- Hits: 5
好像不是很流行了,但確實也是蠻穩的
只是也有些缺點,畢竟新得出來就是要解決痛點的
現在來把舊的Docker Swarm也更新一下K8S
該它休息了

- Details
- Written by: sam
- Category: 電腦相關
- Hits: 785
遷移網站的主機商
找了個買很久的機器來暫時測試
我就覺得怪,怎麼常常連不上

在重裝時無法直接上ssh key,先用了密碼方式
上線後,更改為強制KEY
一下子,就幾個小時,被入侵並放了木馬
過了幾天才發現,一直對外攻擊
找到了幾個並清除
rm -rf /usr/bin/bsd-port/
- VPS VDS 測試報告
- brotli with openresty or nginx
- DKIM Postfix Debian
- error while loading shared libraries: libcrypt.so.1
- Why "grafana" with no picture out?
- WireGuard VPN GCP
- Debian NO_PUBKEY
- EdgeRouter Lite blinking console light
- Linux perf
- AMD真香機
- AMD-V
- Joomla\CMS\Cache\Storage\FileStorage::_deleteFolder JFolder
- Joomla PHP 5.6 to 7.4 on Debian
- Upgrade Debian 8 Jessie to Debian Linux 9 Stretch
- Docker ELK Winlogbeat FileBeat
- Minikube with VMware k9s