Ubuntu 22.04系統安裝部署Kubernetes v1.29.13集群

Ubuntu 22.04系統安裝部署Kubernetes v1.29.13集群

  • 簡介
    • Kubernetes 的工作流程概述
    • Kubernetes v1.29.13 版本
    • Ubuntu 22.04 系統安裝部署 Kubernetes v1.29.13 集群
  • 1 環境準備
    • 1.1 集群IP規劃
    • 1.2 初始化步驟(各個節點都需執行)
      • 1.2.1 主機名與IP地址解析
      • 1.2.2 關閉swap
      • 1.2.3 禁用防火墻
      • 1.2.4 時鐘同步
      • 1.2.5 配置內核轉發和網橋過濾
    • 1.3 安裝 Kubernetes 必備組件
      • 1.3.1 安裝 Docker 或 containerd 作為容器運行時
        • 方法一:Docker+cri-dockerd
        • 方法二:Containerd
      • 1.3.2 安裝 kubeadm、kubelet 和 kubectl
  • 2 MASTER節點初始化
    • 2.1 主節點初始化
    • 2.2 初始化master主節點
  • 3 Woker節點配置及添加
    • 3.1 節點添加
    • 3.2 驗證集群狀態
  • 4 部署Web應用測試

簡介

Kubernetes(簡稱 K8s)是一個開源的容器編排平臺,它能夠自動化地部署、擴展和管理容器化應用。Kubernetes 支持的容器運行時包括 Docker 和 containerd 等。它通過提供集群管理、服務發現、負載均衡、自動擴展等功能,極大地簡化了容器化應用的管理。

Kubernetes 的主要組件包括:

  1. Master 節點(控制平面)

    • API Server:Kubernetes 控制平面的入口,所有的 API 請求都會經過它,它負責協調集群中的各項操作。
    • Scheduler:負責監控集群中的資源情況,并將 Pod 調度到合適的節點上。
    • Controller Manager:負責執行集群控制的任務,確保集群中各項資源處于預期狀態。
    • etcd:一個分布式鍵值存儲,用于保存所有集群的數據和狀態。
  2. Node 節點(工作節點)

    • Kubelet:每個節點上運行的代理,負責管理容器的生命周期,確保容器的運行狀態與 API Server 中的描述一致。
    • Kube Proxy:負責服務發現和負載均衡,代理集群中的網絡流量到正確的 Pod 上。
    • Container Runtime:容器運行時,通常是 Docker 或 containerd,負責啟動和管理容器。
  3. Pod:是 Kubernetes 中最小的可調度單位,可以理解為一個容器或多個容器的集合,容器共享網絡和存儲資源。

  4. Deployment:管理 Pod 的副本集,自動創建、刪除、滾動更新 Pods。

  5. Service:為一組 Pod 提供一個穩定的訪問入口,通常通過 DNS 名稱來訪問。

  6. Namespace:將集群資源分隔成不同的虛擬集群,支持多租戶。

Kubernetes 的工作流程概述

  • 容器化應用的部署:在 Kubernetes 中,首先需要定義一個包含應用容器的 Pod,指定應用的鏡像、存儲卷、網絡策略等。
  • 調度和管理:Scheduler 會選擇一個合適的 Node 節點來部署這個 Pod,Kubelet 會在節點上啟動容器,并向 API Server 報告狀態。
  • 服務發現與負載均衡:當多個 Pod 運行在不同的節點上時,Kubernetes 的 Service 會為它們提供一個統一的訪問入口,實現負載均衡。

Kubernetes v1.29.13 版本

Kubernetes 版本 1.29.13 作為一個較新的版本,提供了一些改進和新特性,主要關注穩定性、性能和安全性等方面。每個版本都會修復已知的問題并加入一些增強功能。升級到這個版本的集群,可以享受到更好的性能表現和更穩定的運行環境。


Ubuntu 22.04 系統安裝部署 Kubernetes v1.29.13 集群

以下是部署 Kubernetes 集群的概念步驟:

  1. 準備環境

    • 操作系統:Ubuntu 22.04 是一個長期支持(LTS)版本,適用于生產環境。
    • 硬件要求:至少有兩臺服務器,一臺作為 Master 節點,至少一臺作為 Worker 節點。
    • 網絡:確保集群的節點之間可以通信,必要時配置防火墻和端口轉發。
  2. 安裝 Kubernetes 必備組件

    • 安裝 Docker(此篇選擇docker+cri-dockerd)containerd 作為容器運行時。
    • 安裝 kubeadmkubeletkubectl 這些 Kubernetes 組件。
  3. 初始化 Master 節點

    • 使用 kubeadm init 初始化 Kubernetes 集群的控制平面。
    • 配置 kubectl,使得控制節點可以管理集群。
  4. 加入 Worker 節點

    • 在 Worker 節點上運行 kubeadm join 命令,加入到已經初始化的 Master 節點。
  5. 配置網絡插件

    • Kubernetes 需要網絡插件來管理 Pod 之間的網絡通信,常用的插件有 CalicoFlannel(推薦)Weave 等。
    • 安裝并配置網絡插件。
  6. 驗證集群

    • 使用 kubectl get nodes -owide 檢查集群節點詳細狀態,確保 Master 節點和 Worker 節點都處于 Ready 狀態。
  7. 部署應用

    • 創建 Deployment、Service 等資源,部署容器化應用。

1 環境準備

#使用kubeadm部署Kubernetes集群的前提條件支持Kubernetes運行的Linux主機,例如Debian、RedHat及其變體等每主機2GB以上的內存,以及2顆以上的CPU各主機間能夠通過網絡正常通信,支持各節點位于不同的網絡中獨占的hostname、MAC地址以及product_uuid,主機名能夠正常解析放行由Kubernetes使用到的各端口,或直接禁用iptables禁用各主機的上的Swap設備各主機時間同步
#準備代理服務,以便接入registry.k8s.io,或根據部署過程提示的方法獲取相應的Image
#重要提示kubeadm不僅支持集群部署,還支持集群升級、卸載、更新數字證書等功能目前,kubeadm為各節點默認生成的SSL證書的有效期限為1年,在到期之前需要renew這些證書

1.1 集群IP規劃

1、OS: Ubuntu 22.04 LTS
2、Docker:27.0,CGroup Driver: systemd
3、Kubernetes:v1.29.13

  • CRI: cri-dockerd, CNI: CoreOS Flannel

4、網絡環境

  • 節點網絡:11.0.1.0/16
  • Pod網絡:10.244.0.0/16
  • Service網絡:10.96.0.0/12
系統版本IP主機hosts
Ubuntu 22.0411.0.1.100k8s-master01.dinginx.org k8s-master01 kubeapi.dinginx.org kubeapi
Ubuntu 22.0411.0.1.101k8s-node01.dinginx.org k8s-node01
Ubuntu 22.0411.0.1.102k8s-node02.dinginx.org k8s-node02
Ubuntu 22.0411.0.1.103k8s-node03.dinginx.org k8s-node03

1.2 初始化步驟(各個節點都需執行)

1.2.1 主機名與IP地址解析

cat >> /etc/hosts <<EOF
11.0.1.100 k8s-master01.dinginx.org k8s-master01 kubeapi.dinginx.org k8sapi.dinginx.org kubeapi
11.0.1.101 k8s-node01.dinginx.org k8s-node01
11.0.1.102 k8s-node02.dinginx.org k8s-node02
11.0.1.103 k8s-node03.dinginx.org k8s-node03
EOF

1.2.2 關閉swap

sed -i '/swap/s/^/# /' /etc/fstab && swapoff -a#檢驗
root@ubuntu2204:~# free -htotal        used        free      shared  buff/cache   available
Mem:           1.9Gi       320Mi       431Mi       1.0Mi       1.2Gi       1.4Gi
Swap:             0B          0B          0B

1.2.3 禁用防火墻

apt install ufw
ufw disable
ufw status

1.2.4 時鐘同步

#更改時區
timedatectl set-timezone Asia/Shanghai#安裝Chrony包
apt install chrony -y
##修改配置文件
cat <<EOF | tee /etc/chrony.conf
server ntp.aliyun.com iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
logchange 0.5
logdir /var/log/chrony
EOF

1.2.5 配置內核轉發和網橋過濾

#添加網橋過濾和內核轉發配置文件
cat >> /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward=1
br_netfilter
overlay
EOF
##刷新配置
sysctl --system#檢查
lsmod

1.3 安裝 Kubernetes 必備組件

1.3.1 安裝 Docker 或 containerd 作為容器運行時

方法一:Docker+cri-dockerd
#安裝docker及依賴
apt-get update
apt-get install ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings##使用國內源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullapt update && apt install -y docker-ce#安裝cri-dockerd
curl -LO https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.15/cri-dockerd_0.3.15.3-0.ubuntu-jammy_amd64.deb
dpkg -i cri-dockerd_0.3.15.3-0.ubuntu-jammy_amd64.deb
systemctl enable --now cri-docker
方法二:Containerd
#下載軟件包
wget https://github.com/containerd/containerd/releases/download/v1.7.24/containerd-1.7.24-linux-amd64.tar.gz
dpkg -i containerd-1.7.24-linux-amd64.tar.gz#創建配置文件
mkdir /etc/containerd/#生成配置文件
containerd conifg default > /etc/containerd/config.toml #修改67行內容
sed -i 's/registry.k8s.io\/pause:3.8/registry.k8s.io\/pause:3.9/' /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/ /etc/containerd/config.toml	
#啟動containerd服務
systemctl enable --now containerd.service
[root@ubuntu2204 ~]# ls /var/run/containerd/ -l
total 0
srw-rw---- 1 root root  0 Dec  9 11:05 containerd.sock		#若未啟動則無此文件
srw-rw---- 1 root root  0 Dec  9 11:05 containerd.sock.ttrpc
drwx--x--x 2 root root 40 Dec  9 11:05 io.containerd.runtime.v1.linux
drwx--x--x 2 root root 40 Dec  9 11:05 io.containerd.runtime.v2.task[root@ubuntu2204 ~]# containerd --version
containerd containerd.io 1.7.23 57f17b0a6295a39009d861b89e3b3b87b005ca27##nerdctl工具可單獨運行容器
wget https://github.com/containerd/nerdctl/releases/download/v2.0.2/nerdctl-2.0.2-linux-amd64.tar.gz
tar zxvf nerdctl-2.0.2-linux-amd64.tar.gz -C /usr/local/
cp /usr/local/bin/nerdctl /usr/bin/
#檢驗
[root@ubuntu2204 ~]# nerdctl --version
nerdctl version 2.0.2
[root@ubuntu2204 ~]# nerdctl --help
nerdctl is a command line interface for containerdConfig file ($NERDCTL_TOML): /etc/nerdctl/nerdctl.tomlUsage: nerdctl [flags]helpers.Management commands:......

1.3.2 安裝 kubeadm、kubelet 和 kubectl

#安裝部署kubelet、kubectl、kubeadm
##使用清華源  apt-cache madison kubeadm 查看軟件版本
apt update && apt-get install -y apt-transport-https
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/kubernetes/core:/stable:/v1.31/deb/ /" |tee /etc/apt/sources.list.d/kubernetes.list
apt update && apt install -y kubelet kubeadm kubectl#鎖定版本防止自動升級
apt-mark hold kubelet kubeadm kubectl
#解除鎖定 apt-mark unhold kubelet kubeadm kubectl#修改配置文件
sed -in.bak  '/^ExecStart/c ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d' /lib/systemd/system/cri-docker.servicesystemctl daemon-reload && systemctl restart cri-docker.service#1.30版本以后kubelet配置在/etc/default/kubelet下
cat << EOF | tee /etc/default/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/var/run/cri-dockerd.sock"
EOF#適用1.29及以前版本
mkdir -pv /etc/sysconfig/ && echo 'KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/var/run/cri-dockerd.sock"' |tee /etc/sysconfig/kubelet#設置開機自啟動
systemctl enable kubelet

2 MASTER節點初始化

2.1 主節點初始化

kubeadm config images list
kubeadm config images list --image-repository=registry.aliyuncs.com/google_containers
docker image pull registry.aliyuncs.com/google_containers/pause:3.9
docker image tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9kubeadm config images pull \--image-repository=registry.aliyuncs.com/google_containers \--cri-socket unix:///var/run/cri-dockerd.sockkubeadm init --control-plane-endpoint="kubeapi.dinginx.org" --kubernetes-version=v1.29.11 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock  --image-repository=registry.aliyuncs.com/google_containers

2.2 初始化master主節點

#初始化master主節點
root@k8s-master01:~# kubeadm init \--control-plane-endpoint="kubeapi.dinginx.org" \--kubernetes-version=v1.29.13 \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12 \--token-ttl=0 \--cri-socket unix:///var/run/cri-dockerd.sock \--image-repository=registry.aliyuncs.com/google_containers		#使用阿里云鏡像......	# 顯示如下內容表示節點初始化成功[addons] Applied essential addon: kube-proxyYour Kubernetes control-plane has initialized successfully!# 第1個步驟提示, Kubernetes集群管理員認證到Kubernetes集群時使用的kubeconfig配置文件
To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join kubeapi.dinginx.org:6443 --token lk5whx.00xug3dwizebomql \--discovery-token-ca-cert-hash sha256:03a18aaca2f33be62f131f7cc111af1c541489519d86254f0d053777f54eb6bf \--control-plane Then you can join any number of worker nodes by running the following on each as root:kubeadm join kubeapi.dinginx.org:6443 --token lk5whx.00xug3dwizebomql \--discovery-token-ca-cert-hash sha256:03a18aaca2f33be62f131f7cc111af1c541489519d86254f0d053777f54eb6bf #復制認證為Kubernetes系統管理員的配置文件至目標用戶(例如當前用戶root)的家目錄下
[root@master01 ~]# mkdir .kube
[root@master01 ~]# cp /etc/kubernetes/admin.conf .kube/config## 或者可復制到其他worker節點賦予管理員權限
[root@k8s-node01 ~]#mkdir -p ~/.kube
[root@k8s-master01 ~]# scp -i /etc/kubernetes/admin.conf 11.0.1.11:~/.kube/config#顯示信息證明配置成功
root@master01:~# kubectl config view --raw
apiVersion: v1
clusters:
- cluster:certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJRnM5c0xMaitZV0F3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TlRBeE16QXhNVFF4TVRWYUZ3MHpOVEF4TWpneE1UUTJNVFZhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUM2aVpEa00xbWFjd3lvcVpEdlVXVndReUhBbkQzd2M1dTF4VjRpNEMyVDFQQ1E2cXZuaDZCZUFCOWoKVXdFV2R0dnFpMllBYnEyMnExZ0t3NXMvSml1dGpHZFNiUkdseVYwY3JGVHNqV2lyVzdacWhTbzdMdHV5SXBDRwpnVU0xNEVUanFkMDIwNlZaajRWaU9PQjYwd3VlOEZXLzR4eXlvMzBudURsT0RCLzQyWjVVclhsdDhKU242WURSClhua2d5ZnZqR1BMS3JaMWp6d0kzWDJRblVHaURqUGdaVWduQkJveFp5Q1QvZTR5SlFGY2xHV2NZK2pEQ2NMMlkKN3hZVDl2ckN6SE54eVlpanQ0SWtSRkd5R0FxSXFacWNCaTcwTHdrNWdpQnNwblBLUllDeGxlN0xjNHdjbVpKcgpFbFJJU08wT3lMUXFleWtzc1hVQkJPTGhVMTVMQWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJSL3BJUTVrSWdjaEdzNE9QR2JWdFNzU2w4TmtqQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQnExU2VFdlRrQQpjNmQ2ZVFUejd1dVc2Y0lhT0pFdy9XcWk5NDF5eit5L1N3YS93dGJ5QVgwc3pxMklPc0JlcTFiL05BQTV3TnR0Cmc1dlV1ajJGa1FlbGRVWnVWYXBFV0VDYjAyMjFZdHY3NS9zTlRMcTJudlpLN0orb3BOZG5qNHFjZXlTKzlmaXgKUEVMa3AyUnU1ZUZveFlhblZwck12UHlyRG5wbktRWk5mT2lxZDcrcXlreWRVNHR2ZFh4Z0NiSnpoWXJzbE1PYQoycTIvWVpIQ1d0UHdaZklhRTR3bnJvVlJUVzJ1MWJKZEh4QzRjMkRhSDljZkhMWllRZ3E4cmk5aUxKNlZNYUNWCkEzd3BVNFhYazVDVTVwdm0waVpkbEkvdFNKSDdUaWFCYXRMZTB0L1cwbjV6R0w1b0FZUFp4TmlKNi9YTktaZ3gKREFEdFBYMjJFeU42Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Kserver: https://kubeapi.dinginx.org:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: kubernetes-adminname: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-adminuser:client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURLVENDQWhHZ0F3SUJBZ0lJQ2RLK21nM2ZYcjB3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TlRBeE16QXhNVFF4TVRWYUZ3MHlOakF4TXpBeE1UUTJNVFphTUR3eApIekFkQmdOVkJBb1RGbXQxWW1WaFpHMDZZMngxYzNSbGNpMWhaRzFwYm5NeEdUQVhCZ05WQkFNVEVHdDFZbVZ5CmJtVjBaWE10WVdSdGFXNHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDdEtEMFUKa3NsWUpBR1o4bFE5UFdsZTc4UU84NVgxbU5vRUo3RURub3pFa05iOXNCbkl1WnJ5NVpYUXpMNndJbkMwVUFaYgpDS2RvL2h6SU5GLy9ySHhmQmhFVkNnN044WExmZ0FXbjMvM09PejlXRnlnOWViamdmNmpUVTBydHRHYkJCdS9xCjBiL2RpNnorV0ZtamhQWTBYZnpCMXFuMThkYjRRRmdoRFlzaTZiTk4ycEtuc3RLNGtYVFI2K05RK1Z4RGo4TTgKRVJLWjVDOGZMRmJuSExnRkxBdXY2YTZEQy9YZ0lHdlBUWGd1UitzWmpmVEQxWkQwdUUrTDZuOTBOcGM2U1FacAo4THR6M1g1LzJnRStrclpjMEtYcTl5VlBodVJIY1dxVHQ1clNRZXhTWit4RCt0Z3pzR3FFNm5rQnhVYlAzY3VpCld6WkQ1cURmWTRTUlpkM1hBZ01CQUFHalZqQlVNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUsKQmdnckJnRUZCUWNEQWpBTUJnTlZIUk1CQWY4RUFqQUFNQjhHQTFVZEl3UVlNQmFBRkgra2hEbVFpQnlFYXpnNAo4WnRXMUt4S1h3MlNNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUNPM2RFZVpCK25OOVVGSnBWTUU1TVc1dlJyCklJdjlzODR3NWdTT0dUTlVTaVRlSFFUYVByTHppT2luRXE1RzNRMXZKNTh3TFNwdHNlWVo5R2xHK1dpM2Q5RzEKSFJoejcwRW9OSVFqWjEwMWNyMnpkMUFwVkR3aUlMczg5VG5WTzJyOGtFcS9GZ2hYYmtuaXhhZGJ0OERFVUxSbQpUaTlsTFQ5aDMva1pWQnFoVUJFcndjTmxWbkJrL1dIQ0lENjFGZHBVNFdEY0pQZzQxeCszdWkrTS9QVGJKV0c1CmZIOEtCdTdSWS9yMFFxbXVCREw5M1h4enRQOFJpaTgycUdTZ0tobXVnc0dPeEpXV2hSU0M1VzV5elBNcTh2eEYKQ2czSlZaU09tVGVZQkI1TW5RLzdjaDZuWjZvZEh1ZnZzcWEwQXZVeW1vUXo3Y3lKbURBNXo1VHoxMGhhCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Kclient-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBclNnOUZKTEpXQ1FCbWZKVVBUMXBYdS9FRHZPVjlaamFCQ2V4QTU2TXhKRFcvYkFaCnlMbWE4dVdWME15K3NDSnd0RkFHV3dpbmFQNGN5RFJmLzZ4OFh3WVJGUW9PemZGeTM0QUZwOS85empzL1ZoY28KUFhtNDRIK28wMU5LN2JSbXdRYnY2dEcvM1l1cy9saFpvNFQyTkYzOHdkYXA5ZkhXK0VCWUlRMkxJdW16VGRxUwpwN0xTdUpGMDBldmpVUGxjUTQvRFBCRVNtZVF2SHl4VzV4eTRCU3dMcittdWd3djE0Q0JyejAxNExrZnJHWTMwCnc5V1E5TGhQaStwL2REYVhPa2tHYWZDN2M5MStmOW9CUHBLMlhOQ2w2dmNsVDRia1IzRnFrN2VhMGtIc1VtZnMKUS9yWU03QnFoT3A1QWNWR3o5M0xvbHMyUSthZzMyT0VrV1hkMXdJREFRQUJBb0lCQUhSbTBHaThKRTMwSm45dQp2K0pMSGtLTHU2aXhadVdxMHlSbjZqOGNubFNsYVdFd3VLU080UExZRTFaQnpRNXFtSWtlSXFlZnNhcUs2SjVOClZ4dHd3RXJBc1VzTGI5aFJyMzgvZUkzWnJheXRkMjVRTXVUZ3ByK0VFZUc5NUdqWEZSdzlwWnFkVmZXQXA5SnoKWWc3aW12K3BEdmpmYlhIQUdWclpKbVZSelc2eHdHZDNqMUZtUjRFK0FmaEQ4TUJEMUZpYW5QbnBoSmNhUzlEdApHWnVUMUE3Z3g2R21kUlJ6RVZObGgvN01DdGpWUEM0WlhTSGtaL1lIeENnNlZHaXdQb1p5ZFhSaWxPS0VPZXNCCkJSNjZkaHNWRGtUVXJwbllXdTR1ZUVpVDIwcnNuQWk0RnVwemhOV2Q0STdXbFlLYnBMYzdJQXpSSy9iUDY2SmIKSXVXT0lRRUNnWUVBeXBjSjNyMHNjNmluYktXV2lTRDdnNXBRVEtIZ3lrQU0yV2FYQnYwWktGaFlmVlJzbTZWYwpqbCtNS1BOZ0Z2bUp3RVlLbThrWFNpR3VRSitJc0xqNkNIcFM1TkFpTzBtKzQ5UlQ3Z3ZXQzgzUXZ1S0NHb2p3CmFIVUxHSUZNN1k3cStMMkVMNDJybk1tVHNPaE1lQm9mZlJVako0Qkh0bFNDbFZSdDRnT0JTK2NDZ1lFQTJzN0IKZ2tOZnlFOVdBRHZySUE0ZmVjSEFrZDBMYlgxbzNkQnM1cDVsUnd3OEVPQnpVYWJzYUVGRmZtSUVTYk8rTDBVQQpHUmFnU0VCVWhFRTZkQVRqNmE5RVpEanQwelMyUTErTVRhM3RscFZ4WGg2MC9MN1VwNUx3RVlJTmZ1eGRSNWtNCnBhL0ppcXJDUmZrVld1VTVQeGN3OC9OTnlmemxUeXJKV1hsTElKRUNnWUVBam1LYldFWWk4T01QVU9nTXBqSmQKTTRDSWdXT2dwdVZmWW9pZEN4ZGwwQnBQano1LzJ1RGM3Vit3RmJQL3pBWDBVQU9xUHhXVlhjL1FOYkVxay9KZQpJUWxBSzNzeEkvUlB5cmFYaW80ZEVVekZNdlBsdHhxWnhRREdIS0g3M0ZiL1JIV0dheG1xRE5jTUMyRXBKWnhPCmwwMzgyQzFydVhVcUZpUXgycERXRmU4Q2dZQlNiUENZa2FqVFhJK1pKdms3NmhZUlY5dWpGeEhtL1FjMEIvLysKSUUwbXBvVTZGbE5hdnZidmp5Y09wUDNZaGMxdklSOFlWRjJzMmc3OGcxWHh2cVhjc2htaFo1Q3ZyM3U1aFpUawo3bEJDR2FuTE91WVRFQkFyMEQ1L1dlNmJrWTdTR2VXWnhNNjNYZnd4UDlPN21mNG10aVhLd0N6ZG1sY0hxNmFOCi9oTS9BUUtCZ1FDdkhYT3JvU1ROSmVGQlptalBBRmdUQXZUQW8zOW1yY0QxaUNDY1FHYyt2djNIL2NDK1B2bGUKZDI3OWE3L05wVDgxazhFL3FwS0VoN1NiZXdXaC9PcDViTWUvSHFtdXpIVWttRWo4c1Zibk5QSk1UcXB2dUhDRgo3VEx2TzdTcWRsa3N4THI1SlcwZzZtT3ZsK3J0L0RJVktyWk9iY1dwRE9lWnUwejRKZ25Eb0E9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=

3 Woker節點配置及添加

3.1 節點添加

kubeadm-init文件(每次初始化內容會不同,切記先進行保存)

kubeadm join kubeapi.dinginx.org:6443 --token lk5whx.00xug3dwizebomql \--discovery-token-ca-cert-hash sha256:03a18aaca2f33be62f131f7cc111af1c541489519d86254f0d053777f54eb6bf \--cri-socket unix:///run/cri-dockerd.sock

3.2 驗證集群狀態

#全部節點及namespace為running狀態
root@k8s-node01:~# kubectl get nodes -owide
NAME                       STATUS   ROLES           AGE     VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
k8s-master01.dinginx.org   Ready    control-plane   2d21h   v1.29.13   11.0.1.10     <none>        Ubuntu 22.04.2 LTS   5.15.0-131-generic   docker://27.5.1
k8s-node01.dinginx.org     Ready    <none>          2d21h   v1.29.13   11.0.1.11     <none>        Ubuntu 22.04.2 LTS   5.15.0-131-generic   docker://27.5.1
k8s-node02.dinginx.org     Ready    <none>          2d21h   v1.29.13   11.0.1.12     <none>        Ubuntu 22.04.2 LTS   5.15.0-131-generic   docker://27.5.1
k8s-node03.dinginx.org     Ready    <none>          2d21h   v1.29.13   11.0.1.13     <none>        Ubuntu 22.04.2 LTS   5.15.0-131-generic   docker://27.5.1

4 部署Web應用測試

#創建服務
root@k8s-master01:~# kubectl create namespace web01 --dry-run=client -oyaml > web01.yaml
root@k8s-master01:~# kubectl run -n web01 --image nginx  web01 --dry-run=client -oyaml >> web01.yaml
root@k8s-master01:~# kubectl create service nodeport web01 --tcp=80:80 --dry-run=client -oyaml >> web01.yaml#配置文件
root@k8s-master01:~# cat web01.yaml 
apiVersion: v1
kind: Namespace
metadata:name: web01
---
apiVersion: v1
kind: Pod
metadata:labels:app: web01name: web01namespace: web01
spec:containers:- image: nginxname: web01imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:labels:app: web01name: web01namespace: web01
spec:ports:- name: 80-80port: 80protocol: TCPtargetPort: 80selector:app: web01type: NodePortroot@k8s-master01:~# kubectl apply -f web01.yaml
root@k8s-master01:~# kubectl -n web01 get pod,svc
NAME        READY   STATUS    RESTARTS   AGE
pod/web01   1/1     Running   0          15mNAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/web01   NodePort   10.110.14.158   <none>        80:32717/TCP   15m#修改顯示內容
root@k8s-master01:~# kubectl exec -it -n web01 pods/web01 -- bash -c "cat > /usr/share/nginx/html/index.html <<EOF
<h1>welcome to dinginx's website!</h1>
EOF"#查看services
root@k8s-node01:~# kubectl -n web01 get svc
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
web01   NodePort   10.110.14.158   <none>        80:32717/TCP   43h

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894429.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于SpringBoot的新聞資訊系統的設計與實現(源碼+SQL腳本+LW+部署講解等)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

每日一題——包含min函數的棧

包含min函數的棧 題目數據范圍&#xff1a;示例C語言代碼實現解釋1. push(value)2. pop()3. top()4. min() 總結大小堆 題目 定義棧的數據結構&#xff0c;請在該類型中實現一個能夠得到棧中所含最小元素的 min 函數&#xff0c;輸入操作時保證 pop、top 和 min 函數操作時&am…

RDP協議詳解

以下內容包含對 RDP&#xff08;Remote Desktop Protocol&#xff0c;遠程桌面協議&#xff09;及其開源實現 FreeRDP 的較為系統、深入的講解&#xff0c;涵蓋協議概要、歷史沿革、核心原理、安全機制、安裝與使用方法、擴展與未來發展趨勢等方面&#xff0c; --- ## 一、引…

【Linux系統】計算機世界的基石:馮諾依曼架構與操作系統設計

文章目錄 一.馮諾依曼體系結構1.1 為什么體系結構中要存在內存&#xff1f;1.2 馮諾依曼瓶頸 二.操作系統2.1 設計目的2.2 系統調用與庫函數 一.馮諾依曼體系結構 馮諾依曼體系結構&#xff08;Von Neumann Architecture&#xff09;是計算機的基本設計理念之一&#xff0c;由…

消息隊列應用示例MessageQueues-STM32CubeMX-FreeRTOS《嵌入式系統設計》P343-P347

消息隊列 使用信號量、事件標志組和線標志進行任務同步時&#xff0c;只能提供同步的時刻信息&#xff0c;無法在任務之間進行數據傳輸。要實現任務間的數據傳輸&#xff0c;一般使用兩種方式&#xff1a; 1. 全局變量 在 RTOS 中使用全局變量時&#xff0c;必須保證每個任務…

【NLP251】Transformer精講 殘差鏈接與層歸一化

精講部分&#xff0c;主要是對Transformer的深度理解方便日后從底層邏輯進行創新&#xff0c;對于僅應用需求的小伙伴可以跳過這一部分&#xff0c;不影響正常學習。 1. 殘差模塊 何凱明在2015年提出的殘差網絡&#xff08;ResNet&#xff09;&#xff0c;Transformer在2016年…

Android學習制作app(ESP8266-01S連接-簡單制作)

一、理論 部分理論見arduino學習-CSDN博客和Android Studio安裝配置_android studio gradle 配置-CSDN博客 以下直接上代碼和效果視頻&#xff0c;esp01S的收發硬件代碼目前沒有分享&#xff0c;但是可以通過另一個手機網絡調試助手進行模擬。也可以直接根據我的代碼進行改動…

圖書管理系統 Axios 源碼__新增圖書

目錄 功能介紹 核心代碼解析 源碼&#xff1a;新增圖書功能 總結 本項目基于 HTML、Bootstrap、JavaScript 和 Axios 開發&#xff0c;實現了圖書的增刪改查功能。以下是新增圖書的功能實現&#xff0c;適合前端開發學習和項目實踐。 功能介紹 用戶可以通過 模態框&#xf…

DeepSeek Janus-Pro:多模態AI模型的突破與創新

近年來&#xff0c;人工智能領域取得了顯著的進展&#xff0c;尤其是在多模態模型&#xff08;Multimodal Models&#xff09;方面。多模態模型能夠同時處理和理解文本、圖像等多種類型的數據&#xff0c;極大地擴展了AI的應用場景。DeepSeek(DeepSeek-V3 深度剖析&#xff1a;…

AJAX XML

AJAX XML 引言 隨著互聯網技術的不斷發展,Web應用對用戶交互性和實時性的要求越來越高。AJAX(Asynchronous JavaScript and XML)技術的出現,為Web應用開發提供了強大的支持。AJAX技術允許Web應用在不重新加載整個頁面的情況下,與服務器進行異步通信。XML作為數據傳輸格式…

OpenGL學習筆記(五):Textures 紋理

文章目錄 紋理坐標紋理環繞方式紋理過濾——處理紋理分辨率低的情況多級漸遠紋理Mipmap——處理紋理分辨率高的情況加載與創建紋理 &#xff08; <stb_image.h> &#xff09;生成紋理應用紋理紋理單元練習1練習2練習3練習4 通過上一篇著色部分的學習&#xff0c;我們可以…

代理模式——C++實現

目錄 1. 代理模式簡介 2. 代碼示例 1. 代理模式簡介 代理模式是一種行為型模式。 代理模式的定義&#xff1a;由于某些原因需要給某對象提供一個代理以控制該對象的訪問。這時&#xff0c;訪問對象不適合或者不能直接訪問引用目標對象&#xff0c;代理對象作為訪問對象和目標…

Vue3 表單:全面解析與最佳實踐

Vue3 表單&#xff1a;全面解析與最佳實踐 引言 隨著前端技術的發展&#xff0c;Vue.js 已經成為最受歡迎的前端框架之一。Vue3 作為 Vue.js 的最新版本&#xff0c;帶來了許多改進和新的特性。其中&#xff0c;表單處理是 Vue 應用中不可或缺的一部分。本文將全面解析 Vue3 …

C++11新特性之范圍for循環

1.介紹 C11標準之前&#xff0c;使用for循環遍歷數組或容器&#xff0c;只能使用以下結構&#xff1a; for&#xff08;表達式1&#xff1b;表達式2&#xff1b;表達式3&#xff09;{ 循環體 } 那么在C11標準中&#xff0c;除了上面的方法外&#xff0c;又引入了一種全新的語…

攻防世界 fileclude

代碼審計 WRONG WAY! <?php include("flag.php"); highlight_file(__FILE__);//高亮顯示文件的源代碼 if(isset($_GET["file1"]) && isset($_GET["file2"]))//檢查file1和file2參數是否存在 {$file1 $_GET["file1"];$fi…

圖書管理系統 Axios 源碼__獲取圖書列表

目錄 核心功能 源碼介紹 1. 獲取圖書列表 技術要點 適用人群 本項目是一個基于 HTML Bootstrap JavaScript Axios 開發的圖書管理系統&#xff0c;可用于 添加、編輯、刪除和管理圖書信息&#xff0c;適合前端開發者學習 前端交互設計、Axios 數據請求 以及 Bootstrap 樣…

Vue 響應式渲染 - 列表布局和v-html

Vue 漸進式JavaScript 框架 基于Vue2的學習筆記 - Vue 響應式渲染 - 列表布局和v-html 目錄 列表布局 簡單渲染列表 顯示索引值 點擊變色 V-html 作用 注意 采用策略 應用 總結 列表布局 簡單渲染列表 Data中設置狀態&#xff0c;是一個數組格式的默認信息。 然后…

如何實現一個CLI命令行功能 | python 小知識

如何實現一個CLI命令行功能 | python 小知識 在現代軟件開發中&#xff0c;命令行界面&#xff08;CLI&#xff09;的設計與交互至關重要。Click是一個強大的Python庫&#xff0c;專門用于快速創建命令行界面&#xff0c;以其簡單易用性和豐富的功能贏得了開發者的青睞。本文將…

[SAP ABAP] Debug Skill

SAP ABAP Debug相關資料 [SAP ABAP] DEBUG ABAP程序中的循環語句 [SAP ABAP] 靜態斷點的使用 [SAP ABAP] 在ABAP Debugger調試器中設置斷點 [SAP ABAP] SE11 / SE16N 修改標準表(慎用)

kamailio-Core 說明書 版本:Kamailio SIP Server v6.0.x(穩定版)

Core 說明書 版本&#xff1a;Kamailio SIP Server v6.0.x&#xff08;穩定版&#xff09; 概述 本教程收集了 Kamailio 導出的函數和參數 core 添加到配置文件中。 注意&#xff1a;此頁面上的參數不按字母順序排列。 結構 kamailio.cfg 的結構可以看作是三個部分&#xff…