Ubuntu安裝k8s集群入門實踐-v1.31

準備3臺虛擬機

在自己電腦上使用virtualbox 開了3臺1核2G的Ubuntu虛擬機,你可以先安裝好一臺,安裝第一臺的時候配置臨時調高到2核4G,安裝速度會快很多,安裝完通過如下命令關閉桌面,能夠省內存占用,后面我們都是通過SSH進行連接。

  1. 安裝配置第一臺虛擬機
sudo systemctl set-default multi-user.target
sudo systemctl reboot

重啟完成后,安裝SSH

sudo apt install openssh-server
# 查看啟動狀態,Active: active (running) ,不是這個狀態的,就是沒啟動
sudo systemctl status ssh
# 沒用啟動,使用如下命令啟動sudo /etc/init.d/ssh start

記錄本機的IP地址

ip addr
  1. 關閉交換分區
    k8s 默認要求關閉linux的交換分區,否則會無法啟動,除非手動配置交換分區,這里我們選擇禁用
# 永久禁用交換分區,會給/etc/fstab的swap配置注釋掉,修改完要重啟生效
sudo sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
  1. 復制剩余虛擬機
    通過virtualbox的復制功能,復制另外兩臺虛擬機,網卡我們都選擇重新生成MAC地址,等待復制完成后,記錄虛擬機的IP地址
  2. 測試SSH連接
    在SSH工具中配置完成,我用的工具是Termius,測試連接是否正常
  3. 設置主機名
    給3臺虛擬機設置不同的主機名,確定其中一臺做為k8s-master,其余兩臺做為k8s-node1何k8s-node2
sudo hostnamectl set-hostname youhostname

安裝容器運行時

k8s 1.24 后廢棄了直接集成的dockershim,如果要繼續使用docker就需要額外安裝CRI,https://github.com/Mirantis/cri-dockerd

這里我們使用containerd,該容器運行時,也是docker 公司的,只是更核心

## 1、containerd
# 下載包
wget https://github.com/containerd/containerd/releases/download/v1.7.22/containerd-1.7.22-linux-amd64.tar.gz
?
# 將下載的包解壓到/usr/local下
tar Cxzvf /usr/local containerd-1.7.22-linux-amd64.tar.gz
?
# 下載服務啟動文件
wget -O /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
# 文件內容如下,下載不下來直接復制
cat /etc/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target dbus.service[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerdType=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999[Install]
WantedBy=multi-user.target# 啟動containerd
systemctl daemon-reload
systemctl enable --now containerd
?
## 2、Installing runc
wget https://github.com/opencontainers/runc/releases/download/v1.2.0-rc.3/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc

切換國內源

# 創建containerd目錄
mkdir /etc/containerd
?
# 恢復默認配置文件
containerd config default | sudo tee /etc/containerd/config.toml
?
# 切換為國內源
sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/containerd/config.toml
?
# 修改SystemCgroup為true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = true

鏡像加速

[root@master ~]# vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry]config_path = "/etc/containerd/certs.d"  #修改此處
[root@master ~]# mkdir -p /etc/containerd/certs.d/docker.io
# docker hub加速
[root@master ~]# vim /etc/containerd/certs.d/docker.io/hosts.toml
[root@master ~]# cat /etc/containerd/certs.d/docker.io/hosts.toml 
server ="https://docker.io"
[host."https://docker.m.daocloud.io"]capabilities =["pull","resolve"]
[host."https://reg-mirror.giniu.com"]capabilities =["pull","resolve"]
# registry.k8s.io鏡像加速
[root@master ~]# mkdir -p /etc/containerd/certs.d/registry.k8s.io
[root@master ~]# vim /etc/containerd/certs.d/registry.k8s.io/hosts.toml
[root@master ~]# cat /etc/containerd/certs.d/registry.k8s.io/hosts.toml
server ="https://registry.k8s.io"
[host."https://k8s.m.daocloud.io"]capabilities =["pull","resolve","push"]
# 重啟服務(更多加速文檔參考上述文檔)
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart containerd.service

安裝kubeadm、kubelet、kubectl

在3臺機器上分別安裝kubeadm、kubelet、kubectl,我安裝版本是1.31

# 配置簽名秘鑰
# 如果 `/etc/apt/keyrings` 目錄不存在,則應在 curl 命令之前創建它,請閱讀下面的注釋。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg# 添加倉庫
# 此操作會覆蓋 /etc/apt/sources.list.d/kubernetes.list 中現存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list# 更新包索引、安裝 kubelet、kubeadm 和 kubectl,并鎖定其版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 啟動
sudo systemctl enable --now kubelet

安裝kube-apiserver、kube-proxy、kube-controller-manager等

在這里插入圖片描述
獲取鏡像,只要執行這個命名就能自己拉取需要的鏡像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

在這里插入圖片描述

初始化控制平面

# 創建初始化配置文件
kubeadm config print init-defaults | sudo tee /etc/kubernetes/init-default.yaml# 修改為國內阿里源
sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/kubernetes/init-default.yaml# 設置 apiServerIP 地址. 請自行替換192.168.123.119為自己宿主機IP
sed -i 's/1.2.3.4/192.168.123.119/' /etc/kubernetes/init-default.yaml# 文件內容
[root@master ~]# cat /etc/kubernetes/init-default.yaml
apiVersion: kubeadm.k8s.io/v1beta4
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.123.119bindPort: 6443
nodeRegistration:criSocket: unix:///var/run/containerd/containerd.sockimagePullPolicy: IfNotPresentimagePullSerial: truename: nodetaints: null
timeouts:controlPlaneComponentHealthCheck: 4m0sdiscovery: 5m0setcdAPICall: 2m0skubeletHealthCheck: 4m0skubernetesAPICall: 1m0stlsBootstrap: 5m0supgradeManifests: 5m0s
---
apiServer: {}
apiVersion: kubeadm.k8s.io/v1beta4
caCertificateValidityPeriod: 87600h0m0s
certificateValidityPeriod: 8760h0m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
encryptionAlgorithm: RSA-2048
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.31.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12podSubnet: 192.168.0.0/16   #加入此句
proxy: {}
scheduler: {}# 初始化主節點
kubeadm init --image-repository registry.aliyuncs.com/google_containers

部署完成后提示:

Your Kubernetes control-plane has initialized successfully!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/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.123.119:6443 --token ruyc2h.0e2tbzjopd6jte33 \--discovery-token-ca-cert-hash sha256:d320cc377ffbf516d017d7ed0ccc9f416013808827d3f8ffe545a57ca5271f4f 

按照說明執行
以普通用戶身份運行以下操作:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果您是root用戶,也可以運行

export KUBECONFIG=/etc/kubernetes/admin.conf

目前為止容器運行狀態:
在這里插入圖片描述
coredns 一直是Pending狀態,需要安裝網絡一個網絡插件

安裝網絡插件

網絡插件有很多,可見https://v1-31.docs.kubernetes.io/zh-cn/docs/concepts/cluster-administration/addons/#networking-and-network-policy
我選擇Calico

wget https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml
kubectl apply -f calico.yaml

在其他的虛擬機上運行如下命令,加入節點,命令來自kubeadm init 初始化后打印的:

kubeadm join 192.168.123.119:6443 --token u0zv3l.pprli0wxqm8zvx5y \--discovery-token-ca-cert-hash sha256:7f16be323774a4e2dd41639e3188ce458614bb570899c39d245bc93b9cac13d2 # 過期后,在master重新獲取
kubeadm token create --print-join-command

如果安裝完,coredns節點還是pending, 節點也是NotReady狀態,在各節點上重啟
sudo systemctl restart kubelet
sudo systemctl restart containerd

在這里插入圖片描述
在這里插入圖片描述

部署kubernetes-dashboard

目前官方推薦使用heml 來部署

# 下載 helm
wget https://get.helm.sh/helm-v3.16.1-linux-amd64.tar.gztar zxf helm-v3.16.1-linux-amd64.tar.gzmv linux-amd64/helm /usr/local/bin/helm && rm -rf linux-amd64# 添加 kubernetes-dashboard 倉庫
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/# 使用 kubernetes-dashboard Chart 部署名為 `kubernetes-dashboard` 的 Helm Release
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard# 修改網絡類型,type:ClusterIP --> type:NodePort
kubectl edit svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard# 查看網絡kubectl -n kubernetes-dashboard get svc

在這里插入圖片描述
系統自動分配了31613端口,使用https://任意集群IP:端口,https://192.168.123.119:31613

在這里插入圖片描述

創建長效token

# 創建ServiceAccount
kubectl -n kubernetes-dashboard create serviceaccount admin-user-permanent# 綁定 ClusterRole
kubectl create clusterrolebinding admin-user-permanent \--clusterrole=cluster-admin \--serviceaccount=kubernetes-dashboard:admin-user-permanent# 創建長期有效的token
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:name: admin-user-permanent-tokennamespace: kubernetes-dashboardannotations:kubernetes.io/service-account.name: admin-user-permanent
type: kubernetes.io/service-account-token
EOF# 獲取token
kubectl -n kubernetes-dashboard get secret admin-user-permanent-token -o jsonpath="{.data.token}" | base64 --decode# 讓token 失效
kubectl -n kubernetes-dashboard delete secret admin-user-permanent-token

常用命令:
– 查看pod
kubectl get pods -A
– 刪除pod
kubectl delete deployment -n kube-system coredns
– 查看pod事件
kubectl describe pod -n kube-system coredns-6b59c98dd4-r5fmt
– 查看pod日志最后50行
kubectl logs -n kube-system -l k8s-app=calico-node --tail=50
– 滾動升級,更新版本號
kubectl set image deploy/my-dep nginx=nginx:1.16.1 --record=true
– 回滾
—查看歷史記錄
kubectl rollout history deployment/my-dep
— 回滾到上次
kubectl rollout undo deploy/my-dep
— 回滾到指定版本
kubectl rollout undo deploy/my-dep --to-revision=1

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

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

相關文章

Word Press富文本控件的保存

新建富文本編輯器&#xff0c;并編寫save方法如下&#xff1a; edit方法&#xff1a; export default function Edit({ attributes, setAttributes }) {return (<><div { ...useBlockProps() }><RichTexttagNameponChange{ (value) > setAttributes({ noteCo…

【編程趣味游戲】:基于分支循環語句的猜數字、關機程序

&#x1f31f;菜鳥主頁&#xff1a;晨非辰的主頁 &#x1f440;學習專欄&#xff1a;《C語言學習》 &#x1f4aa;學習階段&#xff1a;C語言方向初學者 ?名言欣賞&#xff1a;"編程的核心是實踐&#xff0c;而非空談" 目錄 1. 游戲1--猜數字 1.1 rand函數 1.2 sr…

UE5 UI 控件切換器

文章目錄分類作用屬性分類 面板 作用 可以根據索引切換要顯示哪個子UI&#xff0c;可以擁有多個子物體&#xff0c;但是任何時間只能顯示一個 屬性 在這里指定要顯示的UI的索引

scikit-learn 包

文章目錄scikit-learn 包核心功能模塊案例其他用法**常用功能詳解****(1) 分類任務示例&#xff08;SVM&#xff09;****(2) 回歸任務示例&#xff08;線性回歸&#xff09;****(3) 聚類任務示例&#xff08;K-Means&#xff09;****(4) 特征工程&#xff08;PCA降維&#xff0…

Excel 將數據導入到SQLServer數據庫

一般系統上線前期都會導入期初數據&#xff0c;業務人員一般要求你提供一個Excel模板&#xff0c;業務人員根據要求整理數據。SQLServer管理工具是支持批量導入數據的&#xff0c;所以我們可以使用該工具導入期初。Excel格式 第一行為字段1、連接登入的數據庫并且選中你需要導入…

剪枝和N皇后在后端項目中的應用

剪枝算法&#xff08;Pruning Algorithm&#xff09; 生活比喻&#xff1a;就像修剪樹枝一樣&#xff0c;把那些明顯不會結果的枝條提前剪掉&#xff0c;節省養分。 在后端項目中的應用場景&#xff1a; 搜索優化&#xff1a;在商品搜索中&#xff0c;如果某個分類下沒有符合條…

cocos 2d游戲中多邊形碰撞器會觸發多次,怎么解決

子彈打到敵機 一發子彈擊中&#xff0c;碰撞回調多次執行 我碰撞組件原本是多邊形碰撞組件 PolygonCollider2D&#xff0c;我改成盒碰撞組件BoxCollider2D 就好了 用前端的節流方式。或者loading處理邏輯。我測試過了&#xff0c;是可以 本來就是多次啊,設計上貌似就是這樣的…

Kubernetes環境中GPU分配異常問題深度分析與解決方案

Kubernetes環境中GPU分配異常問題深度分析與解決方案 一、問題背景與核心矛盾 在基于Kubernetes的DeepStream應用部署中&#xff0c;GPU資源的獨占性分配是保障應用性能的關鍵。本文將圍繞一個典型的GPU分配異常問題展開分析&#xff1a;多個請求GPU的容器本應獨占各自的GPU&…

Django與模板

我叫補三補四&#xff0c;很高興見到大家&#xff0c;歡迎一起學習交流和進步今天來講一講視圖Django與模板文件工作流程模板引擎&#xff1a;主要參與模板渲染的系統。內容源&#xff1a;輸入的數據流。比較常見的有數據庫、XML文件和用戶請求這樣的網絡數據。模板&#xff1a…

日本上市IT企業|8月25日將在大連舉辦赴日it招聘會

株式會社GSD的核心戰略伙伴貝斯株式會社&#xff0c;將于2025年8月25日在大連香格里拉大酒店商務會議室隆重舉辦赴日技術人才專場招聘會。本次招聘會面向全國范圍內的優秀IT人才&#xff0c;旨在為貝斯株式會社東京本社長期發展招募優質的系統開發與管理人才。招聘計劃&#xf…

低功耗設計雙目協同畫面實現光學變焦內帶AI模型

低功耗設計延長續航&#xff0c;集成儲能模塊保障陰雨天氣下的鐵塔路線的安全一、智能感知與識別技術 多光譜融合監控結合可見光、紅外熱成像、激光補光等技術&#xff0c;實現全天候監測。例如&#xff0c;紅外熱成像可穿透雨霧監測山火隱患&#xff0c;激光補光技術則解決夜間…

datasophon下dolphinscheduler執行腳本出錯

執行hive腳本出錯&#xff1a; 錯誤消息&#xff1a; FAILED: RuntimeException Error loading hooks(hive.exec.post.hooks): java.lang.ClassNotFoundException: org.apache.atlas.hive.hook.HiveHookat java.net.URLClassLoader.findClass(URLClassLoader.java:387)at java.…

【Elasticsearch】安全地刪除快照倉庫、快照

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1?? 冷熱集群架構2?? 合適的鍋炒合適的菜&#xff1a;性能與成本平衡原理公式解析3?? ILM&#xff08;Index Lifecycle Management&#xff09;策略詳解4?? Elasticsearch 跨機房部署5?? 快照與恢…

nodejs的npm

1. 什么是 npm&#xff1f; npm&#xff08;Node Package Manager&#xff09; 是 Node.js 的默認包管理工具&#xff0c;用于&#xff1a; 安裝和管理依賴&#xff08;第三方庫、框架等&#xff09;。運行項目腳本&#xff08;如啟動服務、測試、構建等&#xff09;。發布和共…

外網訪問內部私有局域網方案,解決運營商只分配內網IP不給公網IP問題

相信不少網友和我一樣&#xff0c;為了實現遠程控制、NAS訪問、組建私有云、攝像頭監控之類的需求&#xff0c;把光貓改成了橋接模式&#xff0c;并用自己的路由器撥號、進行端口了映射。本人之前一直用著沒啥問題&#xff0c;不過&#xff0c;最近突然出現了無法訪問的情況&am…

大模型——上下文工程 (Context Engineering) – 現代 AI 系統的架構基礎

上下文工程 (Context Engineering) – 現代 AI 系統的架構基礎 最近,AI大神 Andrej Karpathy 在YC的一個演講《Software in the era of AI 》帶火了一個新的概念 Context Engineering,上下文工程,LangChain也于7月2號在官網博客發表以《Context Engineering》為題目的文章(h…

PostgreSQL RelationBuildTupleDesc 分解

/** RelationBuildTupleDesc** Form the relations tuple descriptor from information in* the pg_attribute, pg_attrdef & pg_constraint system catalogs.*///從pg_attribute,pg_attrdef和pg_constraint 獲取字段信息以填充relation->rd_att static void //用到的…

在 Alpine Linux 中創建虛擬機時 Cgroup 掛在失敗的現象

現象&#xff1a;在 Alpine Linux 中部署 LXD或者incus 服務后&#xff0c;創建 容器或者虛擬機時提示 實例啟動失敗、退出代碼為1&#xff1a;查詢啟動日志后&#xff0c;發現是 cgroup 掛載失敗導致了 container 拉起失敗。原因分析&#xff1a;從啟動日志上看&#xff0c;是…

讓UV管理一切!!!

一、遇到的問題 自己在做AI開發的時候&#xff0c;先用的conda來管理虛擬環境&#xff0c;然后使用pip freeze > reqiurments來打包相關依賴。 優點&#xff0c;conda環境可以讓不同的項目有單獨的虛擬環境&#xff0c;不會干擾每個項目&#xff0c;還可以多個項目共享一個…

Jmeter使用 - 2

5 參數化 5.1 自定義變量 線程組 --> 配置元件 --> 用戶定義的變量 可以自定義變量&#xff0c;通過 ${變量名} 使用 5.2 隨機函數 隨機數函數 # 生產六位數的隨機數字 ${__Random(100000,999999,)} # 生成隨機時間: 時間格式yyyy-MM-dd,開始時間,結束時間,設置時區…