本篇博客將詳細介紹如何在云服務器上搭建 Kubernetes 1.19 集群,以及在我們部署好的集群上使用 部署環(huán)境
目錄
1. 搭建 Kubernetes 1.19 集群我的master節(jié)點設定為4核8gb的機器,這里稱其為master,另一臺機稱為worker。 Step 1: 進入root用戶的身份(master)su 輸入root的密碼即可。 Step 2: 安裝docker(master和worker都要操作)關于 docker 的安裝建議參考官方文檔. 這里給出快速安裝的腳本: curl -fsSL https://get. | sudo sh -s -- --mirror Aliyun sudo usermod -aG docker $USER sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "registry-mirrors": ["https://t9ab0rkd.mirror."] } EOF sudo systemctl daemon-reload sudo systemctl restart docker Step3: 安裝 Kubernetes 三件套: kubelet kubeadm kubectl(僅在master)# 添加并信任APT證書 curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - # 添加源地址 add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" # 更新源并安裝最新版 kubenetes sudo apt update && apt install -y kubelet kubeadm kubectl # 添加 completion,最好放入 .bashrc 中 source <(kubectl completion bash) source <(kubeadm completion bash) Step4: 關閉 swap(master和worker都要操作)這里由于騰訊云主機是默認關閉 swap 的,如果是其他主機,則執(zhí)行以下操作并重啟機器: $ vim /etc/fstab // 注釋掉帶有swap的一行 # UUID=xxxxxxxxx none swap sw 0 0 Step5: 啟動 master(僅在master操作)kubeadm init --image-repository='registry.cn-hangzhou./google_containers' 這里指定了鏡像源為阿里云,所以能夠避免從 kubeadm join 172.16.0.15:6443 --token qi9srp.7sudphpyhmkm8sw6 --discovery-token-ca-cert-hash sha256:a30870d86f7d19aff4d57a2dd64d58736012dfa3b3d5b53c0e45413ba8f039bf 這串信息稍后會在加入worker節(jié)點的時候用到。 Step6: 配置讀取路徑(僅在master操作)export KUBECONFIG=/etc/kubernetes/admin.conf Step7:安裝網(wǎng)絡插件(僅在master操作)kubectl apply -f "https://cloud.s/k8s/net?k8s-version=$(kubectl version | base64 | tr -d 'n')" Step8:將 worker 節(jié)點加入到集群(僅在worker 操作)如果有保存在master節(jié)點執(zhí)行 kubeadm join 172.16.0.15:6443 --token qi9srp.7sudphpyhmkm8sw6 --discovery-token-ca-cert-hash sha256:a30870d86f7d19aff4d57a2dd64d58736012dfa3b3d5b53c0e45413ba8f039bf 可以直接復制過來使用. 沒有保存的話, openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | sha256sum | awk '{print $1}' Step9: 驗證執(zhí)行結(jié)果2. 通過 yaml 文件部署前后端應用由于服務計算的第九次作業(yè)開發(fā)了一個前后端分離的應用程序,并打包成了 docker 鏡像,所以正好可以利用搭建好的集群部署前后端應用。查閱了 Kubernetes 官方文檔后,我決定分別為前后端服務配置一個 bbs_backend 的部署DeploymentapiVersion: apps/v1 kind: Deployment metadata: name: bbs-backend spec: selector: matchLabels: app: bbs-backend tier: backend track: stable replicas: 3 # 副本數(shù) template: metadata: labels: app: bbs-backend tier: backend track: stable spec: containers: - name: bbs-backend image: "docker.io/bobbai/bbs_backend" # 這里pod要拉取的鏡像 ports: - name: port containerPort: 5000 # 這里指定了基于鏡像創(chuàng)建容器之后服務所在的端口 ServiceapiVersion: v1 kind: Service metadata: name: bbs-backend-service spec: selector: app: bbs_backend tier: backend ports: - protocol: "TCP" # 服務提供的協(xié)議 port: 5000 # service暴露在cluster ip上的端口,<cluster ip>:port 是提供給集群內(nèi)部客戶訪問service的入口。 targetPort: 5000 # targetPort是pod上的端口,從port和nodePort上到來的數(shù)據(jù)最終經(jīng)過kube-proxy流入到后端pod的targetPort上進入容器 nodePort: 30086 # 暴露在公網(wǎng)的端口,服務可以通過 <master ip>:nodePort 訪問 type: NodePort bbs_frontend 的部署這里yaml文件與后端部署所用到的類似,不再重復,直接上文件: apiVersion: apps/v1 kind: Deployment metadata: name: bbs-frontend spec: selector: matchLabels: app: bbs-frontend tier: frontend track: stable replicas: 3 template: metadata: labels: app: bbs-frontend tier: frontend track: stable spec: containers: - name: bbs-frontend image: "docker.io/bobbai/bbs_frontend:k8s" ports: - name: port containerPort: 3000 --- apiVersion: v1 kind: Service metadata: name: bbs-frontend-service spec: selector: app: bbs-frontend tier: frontend ports: - protocol: "TCP" port: 3000 targetPort: 3000 nodePort: 30087 type: NodePort 執(zhí)行: kubectl apply -f bbs_backend -n bbs kubectl apply -f bbs_frontend -n bbs 后,可以通過 dashboard 查看服務是否部署成功: 3. Gitlab 的 Helm 部署Gitlab 是什么?Gitlab 是一個非常著名的開源項目管理工具。除了具有管理進度,項目版本等基本功能之外,gitlab還附帶有一個強大的 CI/CD 系統(tǒng),這使得項目的自動化測試,部署變得十分方便。 為什么要是用 (1) Gitlab 的 Helm 部署step1: 添加 helm 源(在master執(zhí)行)helm repo add stable https://kubernetes-charts.storage. helm repo add aliyun https://kubernetes.oss-cn-hangzhou./charts helm repo add apphub https://apphub./ step2: 下載 gitlab-ce 的 chartshelm pull stable/gitlab-ce // 目錄下會生成一個 gitlab-ce-版本號的壓縮包,通過tar命令解壓即可 tar -zxvf gitlab-ce-xxx.tgz 解壓后應當生成了一個名為 step3: 進入解壓后的目錄,并根據(jù)需求修改 values.yaml 文件cd gitlab-ce vim values.yaml
step4:適配 1.19 集群(如果您的集群是1.16版本之前的,則這一步可以忽略)kubernetes 每個版本的yaml文件版本都有所不同,需要我們根據(jù)自己集群的版本進行適配,即修改 helm/template 中的一些 yaml 文件。
添加:
添加:
step5:創(chuàng)建 PersistentVolume由于gitlab需要將 postgres, redis 的數(shù)據(jù)持久化,因此如果此時根據(jù)gitlab-ce的charts來創(chuàng)建服務,由于我們并沒有聲明對應到gitlab自帶的 PersistentVolumeClaim 對應的掛載目錄下的 PersistentVolume, 服務就無法正常啟動。因此,我們首先創(chuàng)建四個文件夾: mkdir -p /data/gitlab/pv{1..4} 然后創(chuàng)建4個聲明pv的yaml文件,模版如下: --- apiVersion: v1 kind: PersistentVolume metadata: name: gitlab-pv1 namespace: gitlab spec: accessModes: - ReadWriteOnce capacity: storage: 10Gi hostPath: path: /data/gitlab/pv1 persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem 然后依次 apply 這些 yaml 文件: kubectl apply -f pv1.yaml kubectl apply -f pv2.yaml kubectl apply -f pv3.yaml kubectl apply -f pv4.yaml 隨后查看 pv 的狀態(tài) step6:創(chuàng)建服務輸入: helm install gitlab gitlab-ce -n gitlab 這里,-n 參數(shù)指定了服務的命名空間,您可以根據(jù)需求自行更改。 查看服務狀態(tài): |
|