地端Azure DevOps Agent整合Proxy的問題集
早期因為公司網路架構問題,在地端架設的Azure DevOps Agent一直有個問題,就是我們必須手動進行更新。雖然有寫成指令碼來協助,但不能全自動化,就是覺得麻煩。
近期,架構上有所突破,我們可以採取Proxy連線的方式,來重新設定這些地端的Azure DevOps Agent,但在重新設定之後,碰到一些問題,這在整理起來。
早期因為公司網路架構問題,在地端架設的Azure DevOps Agent一直有個問題,就是我們必須手動進行更新。雖然有寫成指令碼來協助,但不能全自動化,就是覺得麻煩。
近期,架構上有所突破,我們可以採取Proxy連線的方式,來重新設定這些地端的Azure DevOps Agent,但在重新設定之後,碰到一些問題,這在整理起來。
我知道,這個題目很奇怪。原因來自於一場週未神奇的Debug之旅。
週末我們進行系統更新,其中包含了Kubernetes叢集。測試區很正常的更新完成,但正式區有個系統,在更新之後不正常,在 kubectl
看來Pod、Service都很正常,但就是會產生連線錯誤。查了好幾個小時,終於發現是核心calico-apiserver有問題,根本跟原本的Pod與Service無關。因為是Calico的問題,造成內部網路的運作不正常,心想,正式區又是核心網路,怎麼會出事呢?
我心都涼了。
上一篇,是直接透過各種 containerd CLI 來存取 Private Registry 裡的 Images。其實這只算一個 PoC,因為要先學習如何存取私有 Registry。有了之前的經驗,那麼接下來的大目標是讓 Kubernetes 的 nodes 也能存取私有 Registry。之前提到,Kubernetes 本身是使用 crictl
CLI 來與 containerd 溝通。
crictl pull --creds "UserName:Password" "ImageDetail"
但我們用 Kubernetes 時不可能這樣下指令,必須透過一些其他方法。Kubernetes 本身可以吃 docker 的 config.json 組態來使用。對「docker 的 config.json 組態」有沒有很熟悉的感覺。對,在上一篇我們透過 nerdctl login
協助,它預設會把相關組態儲存下來到 /root/.docker/config.json
,這不就是我們需要的嗎。
在安裝完containerD之後,有時需要直接與containerd溝通,這時就需要透過CLI,文件共介紹 ctr、nerdctl、crictl 三套 CLI,CLI 與 containerd 的關係,就像 dockerd 與 docker CLI 差不多意思。除了溝通之外,由於我們 Registry 是採用Azure Container Registry,因此另一個重點是要知道如何設定以存取預設 docker.io 以外的 Registry。
話說[前篇]處理好Notebook、Hyper-V網路與VM網路之間的問題之後,在MicroK8s的幫助下,從Kubernetes到Kubernetes Cluster幾乎都是一行指令就能完成。
安裝MicroK8s:
sudo snap install microk8s --classic --channel=1.25
建立與加入Cluster:
microk8s add-node
方便代表看不到細節。因為想要瞭解細節,因此又花了一些時間學習如何從無到有設定與安裝Kubernetes與建置Kubernetes Cluster。