Sealos 用了五年的時間從一個 K8s 一鍵安裝工具蛻變成了一個真正的雲作業系統,將產品體驗提升到了極致,也收穫了 10w+ 的社群使用者。
一個多月前,Sealos 正式釋出了公有云託管版本,社群使用者狂喜,紛紛尋找私有化部署教學。現在教學來了,本文將會手把手教你如何私有化部署 Sealos 桌面環境。
得益於 Sealos CLI 強大的 Kubernetes 生命週期管理,Kubernetes 叢集部署變得非常簡單:
# 注意:helm 版本需要在 3.12.0 及以上!
$ sealos gen labring/kubernetes:v1.25.6 \
labring/helm:v3.12.0 \
labring/calico:v3.24.1 \
labring/cert-manager:v1.8.0 \
labring/openebs:v3.4.0 \
--masters 10.140.0.16 \
--nodes 10.140.0.54 > Clusterfile
# 請修改 Clusterfile 中的 PodSubnet 及 ServiceSubnet
# 預設的 PodSubnet: 100.64.0.0/10
# 預設的 ServiceSubnet: 10.96.0.0/22
$ sealos apply -f Clusterfile
等待叢集就緒後 , 使用 kubectl get pods -A
檢視叢集狀態:
在所有 Pod 均為 Ready 狀態後,即可進行下一步操作。如果您需要部署其他版本的 Kubernetes 叢集,可以在 Sealos 檔案 中檢視支援的版本。
使用下面的指令碼即可一鍵安裝 Sealos 所有的依賴元件:
#!/bin/bash
set -e
cat << EOF > ingress-nginx-config.yaml
apiVersion: apps.sealos.io/v1beta1
kind: Config
metadata:
creationTimestamp: null
name: ingress-nginx-config
spec:
data: |
controller:
hostNetwork: true
kind: DaemonSet
service:
type: NodePort
match: docker.io/labring/ingress-nginx:v1.5.1
path: charts/ingress-nginx/values.yaml
strategy: merge
EOF
sealos run docker.io/labring/kubernetes-reflector:v7.0.151\
docker.io/labring/ingress-nginx:v1.5.1\
docker.io/labring/zot:v1.4.3\
docker.io/labring/kubeblocks:v0.5.3\
--env policy=anonymousPolicy\
--config-file ingress-nginx-config.yaml
echo "patch ingress-nginx-controller tolerations to allow run on master node, if you don't want to run on master node, please ignore this step"
kubectl -n ingress-nginx patch ds ingress-nginx-controller -p '{"spec":{"template":{"spec":{"tolerations":[{"key":"node-role.kubernetes.io/control-plane","operator":"Exists","effect":"NoSchedule"}]}}}}'
echo "waitting for kubeblocks crd created, this may take a while"
while ! kubectl get clusterdefinitions.apps.kubeblocks.io redis >/dev/null 2>&1; do
sleep 5
done
echo "start patch redis clusterdefinition"
kubectl patch clusterdefinitions.apps.kubeblocks.io redis --type='json' -p '[{"op": "add", "path": "/spec/componentDefs/0/podSpec/containers/1/resources/limits", "value": {"cpu":"100m", "memory":"100Mi"}}]'
echo "patch redis success"
echo "wait for all pod to be ready then install Sealos"
kubectl get po -A
過程可能稍長,等待所有 Pod 均為 Ready 狀態後,即可進行下一步。
只需一條命令即可一鍵部署 Sealos:
$ sealos run docker.io/labring/sealos-cloud:latest\
--env cloudDomain="34.81.60.57.nip.io"
等待所有 Pod 均為 Ready 狀態後,即可存取 Sealos,最終叢集 Pod 如下:
瀏覽器存取 https://34.81.60.57.nip.io
即可進入 Sealos,由於是自簽名證書,瀏覽器會顯示不安全,無法開啟 App,可參考下文 Q&A 中的解決方案。
關於 Sealos 的使用,可以參考 Sealos 官方檔案中的案例。
如果你需要使用自己的域名,可以將 cloudDomain
引數修改為你的域名,例如: cloudDomain="sealos.cloud"
;
如果你需要使用自己的證書,你可以使用下面的指令碼(注意需要修改證書位置及 yaml_content 中的 match image)生成 tls-secret.yaml
檔案,然後在 sealos run sealos-cloud
時使用 --config-file
引數指定該檔案:
#!/bin/bash
# 讀取原始證書和金鑰檔案
tls_crt_file="tls.cer"
tls_key_file="tls.key"
# 使用 base64 轉換
tls_crt_base64=$(cat $tls_crt_file | base64 | tr -d '\n')
tls_key_base64=$(cat $tls_key_file | base64 | tr -d '\n')
# 定義 YAML 檔案內容
yaml_content="
apiVersion: apps.sealos.io/v1beta1
kind: Config
metadata:
name: secret
spec:
path: manifests/tls-secret.yaml
# please change the match image to your own image
match: docker.io/labring/sealos-cloud:latest
strategy: merge
data: |
data:
tls.crt: $tls_crt_base64
tls.key: $tls_key_base64
"
# 建立新的 cloud-config.yaml 檔案
echo "$yaml_content" > tls-secret.yaml
sealos run docker.io/labring/sealos-cloud:latest\
--env cloudDomain="34.81.60.57.nip.io"\
--config-file tls-secret.yaml
離線部署依賴於 Sealos 強大的離線交付能力,離線部署步驟也非常簡單,需要在公網環境下需要提前使用 sealos pull/save
儲存映象:
#!/bin/bash
# pull_images.sh
set -ex
mkdir -p tars
images=(
docker.io/labring/kubernetes:v1.25.6
docker.io/labring/helm:v3.12.0
docker.io/labring/calico:v3.24.1
docker.io/labring/cert-manager:v1.8.0
docker.io/labring/openebs:v3.4.0
docker.io/labring/kubernetes-reflector:v7.0.151
docker.io/labring/ingress-nginx:v1.5.1
docker.io/labring/zot:v1.4.3
docker.io/labring/kubeblocks:v0.5.3
docker.io/labring/sealos-cloud:latest
)
for image in "${images[@]}"; do
sealos pull "$image"
filename=$(echo "$image" | cut -d':' -f1 | tr / -)
sealos save -o "tars/${filename}.tar" "$image"
done
執行完這個指令碼後,會在當前目錄下生成一個 tars 目錄,裡面包含了所有的映象檔案。
然後將映象拷貝到內網環境下,使用 sealos load
命令載入映象:
#!/bin/bash
# load_images.sh
set -ex
for file in tars/*.tar; do
sealos load -i "$file"
done
注意:在內網環境下如果缺少 Docker 映象,還需要您自己操作匯入 Docker 映象。當然,Sealos CLI 同樣也可以。
如果您在安裝過程中遇到任何問題,可以在 Sealos 開發者社群 或者 Sealos issues 中提出,我們將盡快回復並幫助您解決問題。或者您也可以加入我們的微信交流群,與與開發者和其他使用者進行親切友好的交流