Kubernetes 是一個開源的容器編排平臺,用于自動化應用程序的部署、擴展和管理。它提供了一個強大的工具集,幫助開發者和運維團隊管理容器化應用程序的生命周期。本文將詳細介紹如何從零開始搭建一個 Kubernetes 集群,包括準備工作、安裝 Docker、安裝 Kubernetes 組件、配置網絡插件、驗證集群以及部署應用。
在開始搭建 Kubernetes 集群之前,我們需要確保所有節點滿足一定的硬件和軟件要求,并且網絡配置正確。
Kubernetes 使用 Docker 作為容器運行時環境,因此首先需要在所有節點上安裝 Docker。
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker
sudo docker --version
在所有節點上安裝 Kubernetes 組件,包括 kubeadm
、kubelet
和 kubectl
。
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
在 Master 節點上執行以下命令來初始化 Kubernetes 集群:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
注意:--pod-network-cidr
參數指定了 Pod 網絡的 CIDR 范圍,這里使用 Calico 的默認 CIDR。
kubeadm join <Master-Node-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
輸出應顯示 Master 節點的狀態為 NotReady
,這是因為尚未安裝網絡插件。
在每個 Worker 節點上執行以下命令,將其加入 Kubernetes 集群:
kubeadm join
命令加入集群: sudo kubeadm join <Master-Node-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
kubectl get nodes
輸出應顯示所有節點的狀態為 NotReady
,這是因為尚未安裝網絡插件。
Kubernetes 需要一個網絡插件來管理 Pod 之間的通信。常用的網絡插件有 Calico、Flannel 等。本文將使用 Calico 作為網絡插件。
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
kubectl get pods -n kube-system
輸出應顯示 Calico 相關的 Pod 狀態為 Running
。
kubectl get nodes
輸出應顯示所有節點的狀態為 Ready
。
在完成所有步驟后,我們需要驗證 Kubernetes 集群是否正常運行。
kubectl get nodes
輸出應顯示所有節點的狀態為 Ready
。
kubectl get componentstatuses
輸出應顯示所有組件的狀態為 Healthy
。
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pods
輸出應顯示 Nginx Pod 的狀態為 Running
。
kubectl get svc nginx
輸出應顯示 Nginx 服務的 NodePort,通過瀏覽器訪問 <Node-IP>:<NodePort>
應能看到 Nginx 的歡迎頁面。
在 Kubernetes 集群中部署應用通常涉及創建 Deployment 和 Service 資源。以下是一個簡單的示例,展示如何部署一個 Nginx 應用。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
保存為 nginx-deployment.yaml
,然后執行:
kubectl apply -f nginx-deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
保存為 nginx-service.yaml
,然后執行:
kubectl apply -f nginx-service.yaml
kubectl get pods
kubectl get svc
通過瀏覽器訪問 <Node-IP>:<NodePort>
應能看到 Nginx 的歡迎頁面。
本文詳細介紹了如何從零開始搭建一個 Kubernetes 集群,包括準備工作、安裝 Docker、安裝 Kubernetes 組件、配置網絡插件、驗證集群以及部署應用。通過本文的步驟,您可以成功搭建一個 Kubernetes 集群,并在其上部署和管理容器化應用程序。Kubernetes 提供了強大的工具集,幫助您自動化應用程序的部署、擴展和管理,是現代云原生應用開發的重要基礎設施。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。