星期一, 2月 28, 2022

Rancher 2.6 with container in Azure 安裝小記

Rancher 2.6 with container in Azure 安裝小記


上次安裝 Rancher 是 2.5.7 這次來測試 2.6 的版本


OS: openSUSE Leap 15.3 in Azure

Rancher: 2.6


最近又開始看 Kubernetes ~~

這篇先寫使用 single node with container 方式, 之後預計使用 helm 安裝


安裝需求



使用 SSH 連入建立的 openSUSE Leap 15.3 in Azure


切換身份爲 root

>  sudo  su  -


啟動 docker 服務, 並預設啟動


# systemctl  start  docker

# systemctl  enable  docker


叄考官方文件 啟用 rancher container



啟動 Rancher


# docker  run  -d  --restart=unless-stopped   -p  80:80  -p  443:443   --privileged   rancher/rancher:latest


  • 啟動需要一點時間, 可以先去進行其他調整, 或是在主機上使用 top 觀察 loading


然後在 Azure 的 網路安全性群組 開放 Port 443 與 Port 80



開啟瀏覽器 https://YOUR_IP:443

會看到歡迎畫面



這邊會看到提示, 密碼的部份可以透過以下指令取得

# docker  logs  container-id  2>&1 | grep "Bootstrap Password:"


  • container-id 請換成這次執行的 CONTAINER_ID, 可以使用 #docker  ps 觀察


使用查詢到的密碼進行登入



  • 這邊可以填入自訂的密碼 或是 使用亂數產生的密碼

  • 可以設定 Server URL

  • 點選 Continue 繼續


進入歡迎畫面


進入到 Rancher 之後

可以先觀察相關選單

之後應該會比較常使用是 Cluster Management


Rancher 2.6 版本, 在使用 Import Existing 功能時

可以選擇 3 大雲的 Kubernetes 服務



以 Azure AKS 為例


點選 Azure AKS


接下來只要輸入 Cluster 名稱

填入 Account Access 的資訊


就可以順利佈署到 AKS 上面並管理 AKS



EXPLORE CLUSTER 上面也會出現 AKS 的圖示

就可以看到相關資訊  :)


相關的管理就留待後續的測試


又往 Kubernetes 前進一步


~ enjoy it





Reference






Kubecost 安裝小記

Kubecost 安裝小記


OS: openSUSE Leap 15.3

Kubenetes:  1.21.9 in  Azure AKS



今天要來實驗 kubecost 這個套件, 因為不管是 VM 還是 Container, 費用管理都是很重要的一門.

不過實驗的起因是這篇 SUSE 的 Blog


從上面看到 kubecost 可以使用 helm 用幾個步驟簡單的安裝, 就想說來試試看 :)


首先安裝 helm 套件


# zypper  search  helm


Loading repository data...

Reading installed packages...


S | Name                    | Summary                          | Type

--+-------------------------+----------------------------------+--------

  | helm                    | The Kubernetes Package Manager   | package



# zypper  install  helm


Loading repository data...

Reading installed packages...

Resolving package dependencies...


The following 2 NEW packages are going to be installed:

  helm helm-bash-completion


2 new packages to install.

Overall download size: 9.7 MiB. Already cached: 0 B. After the operation,

additional 52.3 MiB will be used.

Continue? [y/n/v/...? shows all options] (y): y



接下來安裝  Kubecost


先建立 kubecost 的 namespace

> kubectl  create  namespace  kubecost


namespace/kubecost created


接下來使用 helm 指令新增 repo 與安裝即可


> helm  repo  add  kubecost  https://kubecost.github.io/cost-analyzer/


"kubecost" has been added to your repositories


> helm  install  kubecost  kubecost/cost-analyzer  --namespace  kubecost  --set  kubecostToken="c2FrYW5hQGN5Y3Uub3JnLnR3xm343yadf78"


W0224 22:31:01.468899   15791 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+

W0224 22:31:01.671750   15791 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+

W0224 22:31:13.011883   15791 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+

W0224 22:31:13.011921   15791 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+

NAME: kubecost

LAST DEPLOYED: Thu Feb 24 22:31:00 2022

NAMESPACE: kubecost

STATUS: deployed

REVISION: 1

TEST SUITE: None

NOTES:

--------------------------------------------------Kubecost has been successfully installed. When pods are Ready, you can enable port-forwarding with the following command:

    

    kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 9090

    

Next, navigate to http://localhost:9090 in a web browser.


Having installation issues? View our Troubleshooting Guide at http://docs.kubecost.com/troubleshoot-install



這樣 kubecost 就安裝完成了, 只要 3 步驟

如同提示那樣, 透過 kubectl port-forward 來觀察 kubecost


> kubectl  port-forward  --namespace  kubecost  deployment/kubecost-cost-analyzer  9090


打開瀏覽器的 http://localhost:9090





點選要觀察的 Cluster

首先會出現 Overview 的介面, 但是一開始不會馬上出現資料, 他需要一段時間


放一段時間畫面大概如下



Cost Allocation 的部份可以依照你指定的分類來觀察費用

例如 7 天內按照 Namespace 來觀察



或是按照 Pod 來觀察



有不同的分類方式


Assets 則可以用不同的角度來看花費




Savings 則是最有趣也是最重要的區塊




這邊會根據你的使用量, 提出建議, 例如可以調整 Cluster nodes 的大小來進行節費


Health 的部份則會提出一些點來評估 Cluster 的健康度, 例如有沒有跨多 AZ, 是個不錯的參考



Alerts 還沒去試用, 改天來看看


相關資訊也可以參考官方文件


這邊也有 Azure 的文件


又向 Kubenetes 前進一步


~ enjoy it



Reference


星期一, 2月 21, 2022

kubectl-who-can 安裝 in openSUSE Leap 15.3 小記

kubectl-who-can 安裝 in openSUSE Leap 15.3 小記


OS: openSUSE Leap 15.3

Kubernetes: Kubernetes 1.21.0 ( AKS in Azure )


最近又重回 Study Kubernetes 的懷抱, 

之前用 zypper 搜尋看到一個小工具 kubectl-who-can


# zypper  search  kubectl


Loading repository data...

Reading installed packages...


S | Name            | Summary                                                              | Type

--+-----------------+----------------------------------------------------------------------+--------

  | kubectl-who-can | Tool to show who has permissions to verbs and resources in Kuberne-> | package



今天來實驗一下, 假設你已經有 Kubernetes 的環境


kubectl-who-can



安裝方式, 使用 zypper 安裝即可


# zypper  install  kubectl-who-can


Loading repository data...

Reading installed packages...

Resolving package dependencies...


The following NEW package is going to be installed:

  kubectl-who-can


1 new package to install.

Overall download size: 6.3 MiB. Already cached: 0 B. After the operation, additional 33.2 MiB will

be used.

Continue? [y/n/v/...? shows all options] (y): y


進行相關測試


> kubectl-who-can  create  pods


No subjects found with permissions to create pods assigned through RoleBindings


CLUSTERROLEBINDING                          SUBJECT                   TYPE            SA-NAMESPACE

aks-cluster-admin-binding                   clusterAdmin              User            

aks-cluster-admin-binding                   clusterUser               User            

aks-service-rolebinding                     aks-support               User            

cluster-admin                               system:masters            Group           

system:aks-client-nodes                     system:nodes              Group           

system:controller:daemon-set-controller     daemon-set-controller     ServiceAccount  kube-system

system:controller:job-controller            job-controller            ServiceAccount  kube-system

system:controller:persistent-volume-binder  persistent-volume-binder  ServiceAccount  kube-system

system:controller:replicaset-controller     replicaset-controller     ServiceAccount  kube-system

system:controller:replication-controller    replication-controller    ServiceAccount  kube-system

system:controller:statefulset-controller    statefulset-controller    ServiceAccount  kube-system



然後從網路上找到一篇文章也有參考性


> kubectl-who-can  delete  pods


> kubectl-who-can  get  secrets


> kubectl-who-can  bindings  all


No subjects found with permissions to bindings all assigned through RoleBindings


CLUSTERROLEBINDING         SUBJECT         TYPE   SA-NAMESPACE

aks-cluster-admin-binding  clusterAdmin    User   

aks-cluster-admin-binding  clusterUser     User   

cluster-admin              system:masters  Group


先紀錄一下, 之後如果要來查 RABC 應該很方便


~ enjoy it



Reference:



星期日, 2月 20, 2022

Zabbix Server 6.0 with container in Azure 安裝小記

Zabbix Server 6.0 with container in Azure 安裝小記


OS: openSUSE Leap 15.3 in Azure

Zabbix: 6.0 docker image



最近在專案上要執行服務的監控, 討論之後決定使用 Zabbix, 有以下考量點

  • 相對於之前使用 Nagios 有 container 支援, 社群以及改變也相對活躍

  • 想法上使用 container 的方式來執行 Zabbix Server, Client 的部份看專案的需求來看看要使用套件安裝還是 Container 方式

  • 版本的部份使用剛剛正式發行的 Zabbix 6.0

  • Client 的部份會採取 Active mode 來進行監控, 所以 Server 的部份會開 Port 10051

  • 會實驗與測試  zabbix-proxy with container


這篇文章主要先就 Zabbix Server with container 方式安裝來紀錄


首先先在 Azure 上面建立 VM

  • openSUSE Leap 15.3

  • 大小: Standard B1ms (1 vcpu,2 GiB 記憶體) ( NT$ 596.76 / 每月, 0.8175 TWD/hr ), Blog 是實驗性質所以沒有開太大, 請依照實際的專案調整. 

  • 將 Port 10051 ( Zabbix Active 使用 ) 在 NSG 開放




接下來進行安裝

參考官方文件


Zabbix 的相關資源,  可以參考 https://www.zabbix.com/community

  • 台灣有 Zabbix 的 Telegram 群組 @zabbix_tw 也可以去那邊討論


在 openSUSE Leap 15.3 的終端機上


啟用 docker 服務, 設定開機啟動

# systemctl start docker


# systemctl enable docker


建立 zabbix-net 網路

# docker  network  create  --subnet  172.20.0.0/16  --ip-range  172.20.240.0/20  zabbix-net


啟動相關 container 




# docker run --name postgres-server -t \

             -e POSTGRES_USER="zabbix" \

             -e POSTGRES_PASSWORD="YOUR_PW" \

             -e POSTGRES_DB="zabbix" \

             --network=zabbix-net \

             --restart unless-stopped \

             -d postgres:latest


# docker run --name zabbix-snmptraps -t \

             -v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \

             -v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \

             --network=zabbix-net \

             -p 162:1162/udp \

             --restart unless-stopped \

             -d zabbix/zabbix-snmptraps:alpine-6.0-latest


# docker run --name zabbix-server-pgsql -t \

             -e DB_SERVER_HOST="postgres-server" \

             -e POSTGRES_USER="zabbix" \

             -e POSTGRES_PASSWORD="YOUR_PW" \

             -e POSTGRES_DB="zabbix" \

             -e ZBX_ENABLE_SNMP_TRAPS="true" \

             --network=zabbix-net \

             -p 10051:10051 \

             --volumes-from zabbix-snmptraps \

             --restart unless-stopped \

             -d zabbix/zabbix-server-pgsql:alpine-6.0-latest


# docker run --name zabbix-web-nginx-pgsql -t \

             -e ZBX_SERVER_HOST="zabbix-server-pgsql" \

             -e DB_SERVER_HOST="postgres-server" \

             -e POSTGRES_USER="zabbix" \

             -e POSTGRES_PASSWORD="YOUR_PW" \

             -e POSTGRES_DB="zabbix" \

             -e PHP_TZ="Asia/Taipei" \

             --network=zabbix-net \

             -p 443:8443 \

             -p 80:8080 \

             -v /etc/ssl/nginx:/etc/ssl/nginx:ro \

             --restart unless-stopped \

             -d zabbix/zabbix-web-nginx-pgsql:alpine-6.0-latest


  • 上面的 container 請把 YOUR_PW 換成自己要設定的密碼

  • 我這邊採用的 DB 是 PostgreSQL 配合專案狀況



確認 container 狀態


# docker  ps


CONTAINER ID   IMAGE                                             COMMAND                  CREATED              STATUS              PORTS                                                                            NAMES

588e5c4b7e4a   zabbix/zabbix-web-nginx-pgsql:alpine-6.0-latest   "docker-entrypoint.sh"   About a minute ago   Up About a minute   0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp   zabbix-web-nginx-pgsql

0e9c1ce04840   zabbix/zabbix-server-pgsql:alpine-6.0-latest      "/sbin/tini -- /usr/…"   5 minutes ago        Up 5 minutes        0.0.0.0:10051->10051/tcp, :::10051->10051/tcp                                    zabbix-server-pgsql

837b905ab22a   zabbix/zabbix-snmptraps:alpine-6.0-latest         "/usr/sbin/snmptrapd…"   9 minutes ago        Up 9 minutes        0.0.0.0:162->1162/udp, :::162->1162/udp                                          zabbix-snmptraps

c7fc1c173b10   postgres:latest                                   "docker-entrypoint.s…"   13 minutes ago       Up 13 minutes       5432/tcp                                                                         postgres-server



接下來進行初步設定

  • 在該 VM 的 NSG 設定 Port 80 可以存取 ( 因為是實驗所以走 HTTP, 實務上應該要走 HTTPS ), 這個部份就看自己的設定規劃


開啟網頁 http://YOUR_SERVER_IP 



登入 Zabbix

  • 預設帳號 Admin 

  • 密碼 zabbix


變更 Zabbix Admin 密碼

  • User settings -- > Profile -- > Change password


接下來安裝這台 Zabbix Server 的 Agent

Zabbix Agent 有兩種模式

  • Active - 主動跟 Server 回報, Client -- > Server Port 10051

  • Passive - Server 來跟 Client 詢問, Server  -- > Client Port 10050 

  • 根據官方的說法, 採取 Active 模式是比較好的, 因為 Passive 執行的 process 比較多, 然後當要監控的 client 數量如果太多, 這樣也會增加 Server 的 loading


Zabbix Agent 目前也有兩種

  • zabbix agent2

    • 使用 go 語言, 然後有對 container 的監控支援

  • zabbix agent


Zabbix Agent 2 安裝  ( Zabbix Server 使用 with Privileged )


# docker run --name test20220220-zabbix-agent \

    --network=zabbix-net \

    -e ZBX_HOSTNAME="zabbix-server" \

    -e ZBX_SERVER_HOST="172.20.240.3" \

    --privileged \

    --restart unless-stopped \

    -d zabbix/zabbix-agent2:alpine-6.0-latest


  • ZBX_HOSTNAME 為要登記到 host 的主機名稱, 必須與 Configuration -- > Host 上面的 Host name 一致

  • ZBX_SERVER_HOST 為Server 的 IP 或是 FQDN

    • 這個部份我用  #docker network inspect zabbix-net 查詢 Server IP

  • 使用 --privileged 來啟用 Privileged mode, 有使用 Privileged 的話 Graph 會多了磁碟的相關資訊

  • 因為 預設的 Zabbix Server host 設定無法移除 Interface 設定, 所以這個部份採取 Passive 的方式來進行, 然後是在此主機的 zabbix-net 比較沒有相關顧慮


Zabbix Server 的主機設定更新

在 Zabbix 頁面

  • Configuration -- > Hosts 


  • Host name 的部份填入剛剛 zabbix agent 2 的 ZBX_HOSTNAME

  • Interfaces Agent 的 IP 從 127.0.0.1 改為目前 agent IP, 例如 172.20.240.5 ( 透過 #docker network inspect zabbix-net 查詢 Client IP )


放一段時間就會看到正常了



先踏出 Zabbix 的第一步了



~ enjoy it


Reference