国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

K8s集群搭建教程

這篇具有很好參考價值的文章主要介紹了K8s集群搭建教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

學(xué)習(xí)并總結(jié)一下使用三臺虛擬機(jī)搭建一個kubernetes集群的過程。

一、環(huán)境規(guī)劃

  • Kubernetes 集群大致分為兩類:一主多從和多主多從。
    (1)一主多從(單 master ):一個 Master 節(jié)點,多臺 Node 節(jié)點,搭建簡單,但是有單機(jī)故障風(fēng)險,適合用于測試環(huán)境。
    (2)多主多從(高可用):多臺 Master 節(jié)點和多臺 Node 節(jié)點,搭建麻煩但安全性高,適合用于生產(chǎn)環(huán)境。

  • kubernetes有多種部署方式,目前主流的方式有kubeadm、minikube、二進(jìn)制包三種。簡介如下:
    (1)minikube:一個用于快速搭建單節(jié)點的kubernetes工具。
    (2)kubeadm:一個用于快速搭建kubernetes集群的工具。
    (3)二進(jìn)制包:從官網(wǎng)上下載每個組件的二進(jìn)制包依次安裝,此方式對于理解kubernetes組件更加有效。

1.集群類型:一主多從
2.安裝方式:使用kubeadm工具快速搭建kubernetes集群。
3.主機(jī)規(guī)劃:

角色 IP地址 實驗環(huán)境
Master 192.168.79.101 Centos7.5 虛擬機(jī)
Node1 192.168.79.102 Centos7.5 虛擬機(jī)
Node2 192.168.79.103 Centos7.5 虛擬機(jī)

二、環(huán)境準(zhǔn)備

2.1 搭建流程概述:

  1. 準(zhǔn)備3臺機(jī)器,要求網(wǎng)絡(luò)互通(云服務(wù)器私網(wǎng)互通,虛擬機(jī)網(wǎng)絡(luò)互通),同時可聯(lián)網(wǎng),因為要拉取鏡像。
  2. 關(guān)閉防火墻、selinux、swap分區(qū)等,這些是可能會導(dǎo)致k8s集群出問題的地方,需要提前配置好。
  3. 安裝Docker容器化環(huán)境,同時安裝三個核心組件:kubeadm、kubelet、kubectl。
  4. 下載k8s所需鏡像,創(chuàng)建一個Master節(jié)點,將Node節(jié)點加入到當(dāng)前集群。
  5. 在k8s集群安裝相關(guān)服務(wù)進(jìn)行驗證,登錄k8s的WEB的用戶界面dashboard。

2.2 安裝環(huán)境準(zhǔn)備

其實簡單來說通過兩條指令就能部署一個kubernetes集群:
1.創(chuàng)建一個master節(jié)點:kubeadm init
2.將node節(jié)點加入當(dāng)前集群:kubeadm join <Master 節(jié)點的IP和端口>
在執(zhí)行kubeadm init 指令后,kubeadm首先會做一系列檢查工作,確保機(jī)器能夠安裝kubernetes:

  • linux系統(tǒng)內(nèi)核的版本是否必須3.10以上?
  • linux cgroups模塊是否可用?
  • 機(jī)器的hostname是否標(biāo)準(zhǔn)?
  • 安裝的kubeadm和kubelet是否匹配?
  • docker是否已經(jīng)安裝?

因此建議把環(huán)境配置好再部署。

2.2.1 升級系統(tǒng)內(nèi)核

K8S集群服務(wù)器內(nèi)核必須一致,建議在每個節(jié)點(三臺機(jī)器)上都升級系統(tǒng)內(nèi)核到最新版本。

1.檢查操作系統(tǒng)的版本(操作系統(tǒng)的版本至少在7.5以上)

#實驗環(huán)境下機(jī)器的系統(tǒng)版本為7.9,內(nèi)核版本為3.10.0
#查看系統(tǒng)版本
cat /etc/redhat-release
#查看當(dāng)前系統(tǒng)的內(nèi)核:
uname -sr

k8s集群搭建,kubernetes,docker,容器
2.默認(rèn)的 3.10.0版本較低,建議安裝最新主線內(nèi)核版本:

#在 CentOS 7.x 上啟用 ELRepo 倉庫:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

#查看可用的系統(tǒng)內(nèi)核相關(guān)包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

#安裝最新主線內(nèi)核版本:
yum -y --enablerepo=elrepo-kernel install kernel-ml

k8s集群搭建,kubernetes,docker,容器
3.設(shè)置默認(rèn)的內(nèi)核版本:

#修改GRUB_DEFAULT=0,設(shè)置為0表示默認(rèn)啟動第一個操作系統(tǒng)或內(nèi)核,從0開始計數(shù)
vi /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0 # 修改此處,原來是 saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

4.重新創(chuàng)建內(nèi)核配置:

grub2-mkconfig -o /boot/grub2/grub.cfg

#查看默認(rèn)內(nèi)核
grubby --default-kernel

#若不是最新的,使用以下命令設(shè)置,reboot重啟生效。
grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo)

k8s集群搭建,kubernetes,docker,容器

2.2.2 設(shè)置主機(jī)名和hosts本地解析

這一步的作用是方便識別,如主節(jié)點所在的虛擬機(jī)命名為k8s-master,從節(jié)點所在的虛擬機(jī)命名為k8s-node1、k8s-node2(重啟或者新開窗口可驗證)。

Linux 的 /etc/hosts 文件是配置ip地址及其對應(yīng)主機(jī)名的文件,這里可以記錄本機(jī)的或其他主機(jī)的ip及其對應(yīng)主機(jī)名,方便后面集群節(jié)點間的直接調(diào)用,因此在每個節(jié)點(三臺機(jī)器)上都配置一下主機(jī)名解析。

#根據(jù)集群規(guī)劃,各節(jié)點設(shè)置對應(yīng)的主機(jī)名
hostnamectl set-hostname k8s-master    #192.168.79.101
hostnamectl set-hostname k8s-node1     #192.168.79.102
hostnamectl set-hostname k8s-node2     #192.168.79.103

vi /etc/hosts 
#所有節(jié)點編輯/etc/hosts文件,添加:
127.0.0.1   $(hostname)
192.168.79.101 k8s-master
192.168.79.102 k8s-node1
192.168.79.103 k8s-node2

k8s集群搭建,kubernetes,docker,容器

2.2.3 關(guān)閉防火墻和SELinux

在每個節(jié)點(三臺機(jī)器)上都關(guān)閉防火墻,并設(shè)置開機(jī)禁用。

在實際生產(chǎn)環(huán)境中,通常會采用防火墻和SELinux來增強(qiáng)系統(tǒng)的安全性,但在學(xué)習(xí)和測試環(huán)境中,這些安全措施可能會造成麻煩。因此,只用于學(xué)習(xí)環(huán)境建議關(guān)閉所有節(jié)點的防火墻和SELinux,以方便學(xué)習(xí)和測試。三臺機(jī)器(所有節(jié)點)均需要在部署前配置好環(huán)境。

#關(guān)閉防火墻,關(guān)閉SELinux(設(shè)置為disabled)
systemctl stop firewalld && systemctl disable firewalld 
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

#確保防火墻和SElinux是關(guān)閉狀態(tài)
systemctl status firewalld
getenforce

#查看selinux:cat /etc/selinux/config
#1.永久關(guān)閉 SELinux ,需要重啟機(jī)器生效:sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
說明:修改SELinux配置文件,將SELINUX=enforcing改為SELINUX=disabled,禁用SELinux安全模塊。其中,sed是一個文本編輯器,-i選項表示直接修改原文件,#是分隔符,g表示全局替換。

#2.臨時關(guān)閉當(dāng)前會話的 SELinux ,機(jī)器重啟之后無效:setenforce 0
說明:將SELinux設(shè)置為Permissive模式,允許訪問被拒絕的操作,但會記錄到系統(tǒng)日志中。

k8s集群搭建,kubernetes,docker,容器

2.2.4 時間同步

Kubernetes 要求集群中的節(jié)點時間必須精確一致,因此在每個節(jié)點(三臺機(jī)器)上都添加時間同步。

#從指定的NTP服務(wù)器獲取時間信息,并將本地系統(tǒng)時間設(shè)置為該服務(wù)器時間
yum install ntpdate -y
ntpdate time.windows.com

#或者使用國內(nèi)時間服務(wù)器:ntpdate ntp1.aliyun.com

k8s集群搭建,kubernetes,docker,容器

2.2.5 關(guān)閉 swap 分區(qū)

當(dāng)內(nèi)存不足時,linux會自動使用swap,將部分內(nèi)存數(shù)據(jù)存放到磁盤中。swap會導(dǎo)致docker的運(yùn)行不正常,性能下降,還可能產(chǎn)生其他問題,因此部署k8s集群時一定要關(guān)閉swap分區(qū)。在每個節(jié)點(三臺機(jī)器)上都進(jìn)行以下操作:

#所有節(jié)點關(guān)閉swap交換分區(qū)
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a && sysctl -w vm.swappiness=0

#查看是否關(guān)閉(swap 0 0 0則成功關(guān)閉)
free -m

#臨時關(guān)閉當(dāng)前會話的 swap ,機(jī)器重啟之后無效:
swapoff -a

k8s集群搭建,kubernetes,docker,容器

2.2.6 將橋接的IPv4流量傳遞到iptables鏈

  • netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火墻,與大多數(shù)的Linux軟件一樣,這個包過濾防火墻是免費(fèi)的,它可以代替昂貴的商業(yè)防火墻解決方案,完成封包過濾、封包重定向和網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等功能。
  • 規(guī)則(rules)其實就是網(wǎng)絡(luò)管理員預(yù)定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個數(shù)據(jù)包”。規(guī)則存儲在內(nèi)核空間的信息包過濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等。當(dāng)數(shù)據(jù)包與規(guī)則匹配時,iptables就根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作就是添加、修改和刪除這些規(guī)則。
  • 在每個節(jié)點(三臺機(jī)器)上都將橋接的IPv4流量傳遞到iptables的鏈:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
#加載br_netfilter模塊
modprobe br_netfilter

#查看是否加載
lsmod | grep br_netfilter

#使生效
sysctl --system

#拓展:持久化修改(保留配置包本地文件,重啟系統(tǒng)或服務(wù)進(jìn)程仍然有效)
sysctl -p

k8s集群搭建,kubernetes,docker,容器

2.2.7 開啟 ipvs

  • ipvs (IP Virtual Server) 實現(xiàn)了傳輸層負(fù)載均衡,也就是4層LAN交換,作為Linux內(nèi)核的一部分。ipvs運(yùn)行在主機(jī)上,在真實服務(wù)器集群前充當(dāng)負(fù)載均衡器。
  • k8s 默認(rèn)情況下有三種網(wǎng)絡(luò)負(fù)載均衡模式:userspace 代理模式、iptables代理模式、ipvs代理模式。這三種代理模式的負(fù)載能力是依次遞增的。
  • 在 Kubernetes 中 service 有兩種代理模型,一種是基于 iptables ,另一種是基于 ipvs 。ipvs 的性能要高于 iptables 的,但是如果要使用它,需要手動載入 ipvs 模塊。
#在三臺機(jī)器安裝 ipset 和 ipvsadm :
yum -y install ipset ipvsadm

#在三臺機(jī)器執(zhí)行如下腳本:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

#授權(quán)、運(yùn)行、檢查是否加載:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

k8s集群搭建,kubernetes,docker,容器

2.2.8 重啟機(jī)器

此時三臺機(jī)器都基本上完成了安裝前準(zhǔn)備,因為有些配置是重啟后生效,因此建議在每個節(jié)點(三臺機(jī)器)上都重啟一下機(jī)器(reboot)。

2.3 容器化環(huán)境和組件安裝

2.3.1 Docker 安裝

  • 因為安裝kubernetes需要docker容器化環(huán)境,因此先安裝docker,但是注意kubernetes版本和docker的版本對應(yīng)問題。按本博客的版本即可,如果是安裝其他版本,需參考官方文檔。
  • Kubernetes 和 Docker之間有版本的對應(yīng)關(guān)系(如 Docker 版本v20.10對應(yīng) Kubernetes 的版本是 v1.21),版本對應(yīng)不上可能會提示docker版本不兼容,可參考Kubernetes各版本對應(yīng)支持的docker版本列表。
  • 在每個節(jié)點(3臺機(jī)器)上都安裝docker
#卸載舊版本docker(如有)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# yum安裝 gcc 相關(guān)軟件,安裝yum工具包
yum -y install gcc gcc-c++
yum -y install yum-utils

#設(shè)置阿里云的stable 鏡像倉庫
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#更新 yum 軟件包索引
yum makecache fast

#安裝指定版本的 Docker(v20.10.8:
yum -y install docker-ce-3:20.10.8-3.el7.x86_64 docker-ce-cli-1:20.10.8-3.el7.x86_64 containerd.io

#啟動docker并設(shè)置開機(jī)自啟
systemctl start docker
systemctl enable docker

#驗證 Docker 是否安裝成功:
systemctl status docker
docker -v

k8s集群搭建,kubernetes,docker,容器

2.3.2 設(shè)置Docker鏡像加速器:

為了下載各組件時從國內(nèi)鏡像源下載,在每個節(jié)點(3臺機(jī)器)上都需要配置鏡像加速器。

mkdir -p /etc/docker

#配置阿里云鏡像加速:
tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],	
  "registry-mirrors": [
    "https://du3ia00u.mirror.aliyuncs.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://registry.docker-cn.com"
  ],
  "live-restore": true,
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"},
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 5,
  "storage-driver": "overlay2"
}
EOF

#使之生效并重啟docker
systemctl daemon-reload
systemctl restart docker

k8s集群搭建,kubernetes,docker,容器

2.3.3 添加阿里云的YUM軟件源

由于kubernetes的鏡像源在國外,下載軟件包較慢或者下載失敗,這里在每個節(jié)點(3臺機(jī)器)上都切換成國內(nèi)的阿里云鏡像源。

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

k8s集群搭建,kubernetes,docker,容器

#清除緩存并更新軟件包列表
yum clean all
yum makecache
yum list

2.3.4 安裝kubeadm、kubelet和kubectl

在每個節(jié)點(3臺機(jī)器)上都需要安裝kubeadm、kubelet和kubectl,安裝時指定版本為1.21.10。

  • kubeadm是官方社區(qū)推出的一個用于快速部署kubernetes集群的工具。
  • Kubelet:運(yùn)行在cluster(集群)所有節(jié)點上,負(fù)責(zé)啟動POD和容器。
  • kubectl是Kubernetes集群的命令行工具,通過kubectl可以部署和管理應(yīng)用,查看各種資源,創(chuàng)建,刪除和更新組件。

1.安裝三大組件:

yum install -y kubelet-1.21.10 kubeadm-1.21.10 kubectl-1.21.10

#查看安裝版本:
kubelet --version

2.為了實現(xiàn)Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,修改"/etc/sysconfig/kubelet"文件為以下內(nèi)容:

vi /etc/sysconfig/kubelet

# 修改為
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

3.設(shè)置為開機(jī)自啟動即可,由于沒有生成配置文件,集群初始化后自動啟動:

systemctl enable kubelet

k8s集群搭建,kubernetes,docker,容器

三、kubernetes集群部署

3.1 下載k8s所需鏡像

在每個節(jié)點(3臺機(jī)器)上都安裝好k8s集群所需的鏡像。

1.查看 Kubernetes 安裝所需鏡像

kubeadm config images list

2.下載 Kubernetes 安裝所需鏡像

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0

3.查看鏡像下載情況

docker images

k8s集群搭建,kubernetes,docker,容器

3.2 部署 Kubernetes 的 Master 節(jié)點

1.在 192.168.79.101 機(jī)器上部署 Kubernetes 的 Master 節(jié)點:

kubeadm init \
  --apiserver-advertise-address=192.168.79.101 \
  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version=v1.21.10 \
  --service-cidr=10.96.0.0/16 \
  --pod-network-cidr=10.244.0.0/16

說明:

  • apiserver-advertise-address =Master節(jié)點的 IP 地址。
  • image-repository=容器鏡像的倉庫地址。
  • kubernetes-version= 安裝的kubernetes版本號。
  • service-cidr 和 apiserver-advertise-address 、pod-network-cidr 不能在同一個網(wǎng)絡(luò)范圍內(nèi)。
  • 不要使用 172.17.0.1/16 網(wǎng)段范圍,因為這是 Docker 默認(rèn)使用的。

k8s集群搭建,kubernetes,docker,容器
2.拷貝kubectl使用的連接k8s認(rèn)證文件到默認(rèn)路徑,根據(jù)日志提示,想要開始使用集群,需要在 master節(jié)點機(jī)器上(192.168.79.101 )執(zhí)行如下命令:

#創(chuàng)建目錄存放 Kubernetes 的配置文件并配置 Kubernetes 客戶端工具 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

#將 $HOME/.kube/config 文件的權(quán)限修改為當(dāng)前用戶
chown $(id -u):$(id -g) $HOME/.kube/config

# 如果是 root 用戶,可以執(zhí)行如下命令,在使用 kubectl 命令時就不需要每次都指定配置文件的路徑
export KUBECONFIG=/etc/kubernetes/admin.conf

k8s集群搭建,kubernetes,docker,容器
3.默認(rèn)的 token 有效期為 2 小時,當(dāng)過期之后,該 token 就不能用了,另外也可以生成一個永不過期的token,命令如下 :

#生成token,有效期2小時
kubeadm token create --print-join-command

# 生成一個永不過期的token
kubeadm token create --ttl 0 --print-join-command

#此時系統(tǒng)自動生成了一個kubeadm join命令,這個命令是用來將一個新的節(jié)點加入到 Kubernetes 集群中的。說明:
kubeadm join 192.168.79.101:6443    ----集群的 API Server 地址
  --token y1aqpl.ktwweub0h338qh46   ----用來認(rèn)證新節(jié)點的憑證
  --discovery-token-ca-cert-hash sha256:dca999e4b0fdd14b7e92a6ed3cd1fbfedad273ba409e0bc5a76ebc947bd1f3b2

k8s集群搭建,kubernetes,docker,容器

3.3 部署 Kubernetes 的 Node節(jié)點

通過上面自動生成的kubeadm join命令,將兩個node節(jié)點加入到kubernetes集群中

k8s集群搭建,kubernetes,docker,容器

此時集群已經(jīng)有了一個節(jié)點(master)了,此時是NotReady狀態(tài)。同樣的在192.168.79.102 和 192.168.79.103兩臺機(jī)器上都執(zhí)行生成的命令把這兩個工作節(jié)點加入到當(dāng)前集群:

kubeadm join 192.168.79.101:6443 \
    --token y1aqpl.ktwweub0h338qh46 \
    --discovery-token-ca-cert-hash \
 sha256:dca999e4b0fdd14b7e92a6ed3cd1fbfedad273ba409e0bc5a76ebc947bd1f3b2 

k8s集群搭建,kubernetes,docker,容器

3.4 部署網(wǎng)絡(luò)插件

Kubernetes本身并沒有自己實現(xiàn)容器網(wǎng)絡(luò),而是借助CNI標(biāo)準(zhǔn),通過插件化的方式來集成各種網(wǎng)絡(luò)插件,實現(xiàn)集群內(nèi)部網(wǎng)絡(luò)相互通信。

Kubernetes集群設(shè)計了Cluster IP、Node IP、Pod IP三種類型的通信IP:

  • (1)Cluster IP是Service對象的IP地址,實現(xiàn)Pod服務(wù)的負(fù)載均衡,外部網(wǎng)絡(luò)無法ping通,只在集群內(nèi)部可以訪問使用,是一個虛擬的IP。
  • (2)Node IP是集群節(jié)點Node的IP地址,可以是物理機(jī)的IP(也可能是虛擬機(jī)IP)。
  • (3)Pod IP是容器組Pod的IP地址,是在容器組初始化過程由Pause容器申請的IP地址。其中Pod IP是容器網(wǎng)絡(luò)接口CNI與具體的網(wǎng)絡(luò)插件來實現(xiàn)IP的申請及數(shù)據(jù)包的轉(zhuǎn)發(fā)。

1.Kubernetes 支持多種網(wǎng)絡(luò)插件,比如 flannel、calico、canal 等,任選一種安裝即可,這里選擇 calico。在 master節(jié)點(192.168.79.101 )上執(zhí)行:

kubectl apply -f https://projectcalico.docs.tigera.io/v3.19/manifests/calico.yaml

k8s集群搭建,kubernetes,docker,容器
2.查看部署 CNI 網(wǎng)絡(luò)插件進(jìn)度:

kubectl get pods -n kube-system
#或者
watch kubectl get pods -n kube-system

k8s集群搭建,kubernetes,docker,容器

3.在Master節(jié)點使用kubectl工具查看節(jié)點狀態(tài),此時節(jié)點狀態(tài)應(yīng)該都是Ready,pod全部running。

kubectl get nodes

k8s集群搭建,kubernetes,docker,容器

到這里一個一主兩從的k8s集群已經(jīng)搭建好了。

3.5 設(shè)置 kube-proxy 的 ipvs 模式

1.在 Master節(jié)點(192.168.65.101)上設(shè)置 kube-proxy 的 ipvs 模式:

kubectl edit cm kube-proxy -n kube-system

找到ipvs模塊,將 mode: " " 雙引號里面加上ipvs。

k8s集群搭建,kubernetes,docker,容器

2.刪除 kube-proxy ,讓 Kubernetes 集群自動創(chuàng)建新的 kube-proxy :

kubectl delete pod -l k8s-app=kube-proxy -n kube-system

k8s集群搭建,kubernetes,docker,容器

3.6 配置Node節(jié)點也能使用 kubectl 命令

默認(rèn)情況下,只有 Master 節(jié)點才有 kubectl 命令,但是有些時候我們也希望在 Node 節(jié)點上執(zhí)行 kubectl 命令。

1.在兩個node節(jié)點(192.168.79.102 和 192.168.79.103)上都創(chuàng)建config文件,執(zhí)行命令:

mkdir -pv ~/.kube
touch ~/.kube/config

k8s集群搭建,kubernetes,docker,容器
2.在node節(jié)點已經(jīng)創(chuàng)建好了config文件,接下來將master節(jié)點的admin.conf文件遠(yuǎn)程拷貝復(fù)制到需要安裝的機(jī)器(注意你配置的機(jī)器名是什么?如root@k8s-node1)。在master節(jié)點(192.168.79.101)上執(zhí)行:

scp /etc/kubernetes/admin.conf root@k8s-node1:~/.kube/config
scp /etc/kubernetes/admin.conf root@k8s-node2:~/.kube/config

k8s集群搭建,kubernetes,docker,容器
3.此時在兩個node節(jié)點驗證,已經(jīng)可以使用kubectl命令了:
k8s集群搭建,kubernetes,docker,容器

拓展:scp命令的應(yīng)用

  • 機(jī)器名一般為root@localhost,把localhost換成機(jī)器IP
  • 復(fù)制的是目錄的話就要加-r參數(shù)
  • 復(fù)制過程輸入yes同意,再輸入對應(yīng)機(jī)器密碼即可
1.把遠(yuǎn)程的文件復(fù)制到本地
scp 遠(yuǎn)程機(jī)器名:要復(fù)制文件的地址 復(fù)制到本地的文件地址
例:scp root@192.168.79.100:/val/test/test.tar.gz /val/test/test.tar.gz

2.把本地的文件復(fù)制到遠(yuǎn)程主機(jī)上
scp 要復(fù)制文件的地址 遠(yuǎn)程機(jī)器名:復(fù)制到該機(jī)器的文件的地址
例:scp /val/test.tar.gz root@192.168.79.100:/val/test.tar.gz

3.把遠(yuǎn)程的目錄復(fù)制到本地
例:scp -r root@192.168.79.100:/val/test/ /val/test/

4.把本地的目錄復(fù)制到遠(yuǎn)程主機(jī)上
例:scp -r /val/ root@192.168.79.100:/val/

5.當(dāng)同時有多個服務(wù)器的文件要復(fù)制到本地目錄:
例:scp root@192.168.79.1:/var/cp1.tar.gz root@192.168.79.2:/var/cp2.tar.gz /var/tmp/
最后面的一個必需是目錄,前面的必須是文件,才能成功批量復(fù)制,復(fù)制中會提示多次輸入密碼。

3.7 服務(wù)部署

kubernetes集群已經(jīng)部署完畢,接下來可以部署服務(wù)使用了。

在Kubernetes集群中部署nginx1.14,測試下集群是否正常工作。
1.部署Nginx:

kubectl create deployment nginx --image=nginx:1.14-alpine

2.暴露端口:

kubectl expose deployment nginx --port=80 --type=NodePort

3.查看服務(wù)狀態(tài):

kubectl get pods,svc

k8s集群搭建,kubernetes,docker,容器

3.8 自動補(bǔ)全

啟動 kubectl 自動補(bǔ)全功能,參考kubernetes官網(wǎng):Linux 系統(tǒng)中的 Bash 自動補(bǔ)全功能

# 安裝bash
yum -y install bash-completion
# 自動補(bǔ)全 
echo 'source <(kubectl completion bash)' >>~/.bashrc 
kubectl completion bash >/etc/bash_completion.d/kubectl
# 全局
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /usr/share/bash-completion/bash_completion

k8s集群搭建,kubernetes,docker,容器

3.9 安裝K8s-Dashboard

Dashboard 是基于網(wǎng)頁的 Kubernetes 用戶界面??梢允褂?Dashboard 將容器應(yīng)用部署到 Kubernetes 集群中,也可以對容器應(yīng)用排錯,還能管理集群資源。我們可以使用 Dashboard 獲取運(yùn)行在集群中的應(yīng)用的概覽信息,也可以創(chuàng)建或者修改 Kubernetes 資源 (如 Deployment,Job,DaemonSet 等等)。常用的如對Deployment實現(xiàn)彈性伸縮、發(fā)起滾動升級、重啟 Pod 或者使用向?qū)?chuàng)建新的應(yīng)用,展示Kubernetes集群中的資源狀態(tài)信息和所有報錯信息等。
參考資料:安裝Kubernetes Dashboard

1.使用 wget 命令將dashboard(這里版本為2.0.4)下載到Master 節(jié)點上:

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

k8s集群搭建,kubernetes,docker,容器
2.構(gòu)建 Pod:

kubectl apply -f recommended.yaml

3.查看 Pod 狀態(tài),等待一段時間,已經(jīng)處于running狀態(tài)。

kubectl get pods --all-namespaces | grep dashboard

k8s集群搭建,kubernetes,docker,容器
4.刪除現(xiàn)有的 dashboard 服務(wù)

dashboard 服務(wù)的 namespace 是 kubernetes-dashboard,但是該服務(wù)的類型是ClusterIP,不便于我們通過瀏覽器訪問,因此需要在后面配置 NodePort 類型的,使之在集群外部能否訪問。

#查看所有命名空間namespace
kubectl get svc --all-namespaces

#刪除現(xiàn)有dashboard服務(wù)
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

k8s集群搭建,kubernetes,docker,容器

3.10 登錄dashboard

  • 配置文件放在:/etc/Kubernetes
  • k8s所有證書的存放位置:/etc/kubernetes/pki
  • 環(huán)境變量(env)存放的位置:/var/lib/kubelet/kubeadm-flags.env
  • kubelet配置文件存放位置:/var/lib/kubelet/config.yaml

1.創(chuàng)建一個nodePort類型的kubernetes-dashboard。進(jìn)入/etc/kubernetes 目錄下創(chuàng)建配置文件dashboard-svc.yaml:

cd /etc/kubernetes
vi /etc/kubernetes/dashboard-svc.yaml

dashboard-svc.yaml文件內(nèi)容如下:

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

2.創(chuàng)建kubernetes-dashboard的 Service服務(wù):

kubectl apply -f dashboard-svc.yaml

k8s集群搭建,kubernetes,docker,容器
此時再次查看namespace,已經(jīng)有nodePort類型的kubernetes-dashboard,注意443:32031,即外部訪問端口為32031。

kubectl get svc --all-namespaces

k8s集群搭建,kubernetes,docker,容器
3.創(chuàng)建 kubernetes-dashboard 管理員角色,在/etc/kubernetes 目錄下創(chuàng)建配置文件dashboard-svc-account.yaml,其內(nèi)容如下:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: dashboard-admin
subjects:
  - kind: ServiceAccount
    name: dashboard-admin
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

4.同樣的執(zhí)行創(chuàng)建,使該yaml文件生效:

kubectl apply -f dashboard-svc-account.yaml

k8s集群搭建,kubernetes,docker,容器
5.獲取 token,先查找token文件:

kubectl get secret -n kube-system |grep admin|awk '{print $1}'

#系統(tǒng)返回dashboard-admin-token-bvhwm,查看token
kubectl describe secret dashboard-admin-token-bvhwm -n kube-system|grep '^token'|awk '{print $2}'

k8s集群搭建,kubernetes,docker,容器
此時我們得到了dashboard的token,先復(fù)制保存一份:

eyJhbGciOiJSUzI1NiIsImtpZCI6IkFEaEJBYkY1YXAzS3ZTVGZzdFY4aXJ5NWRmU1VIN2FzMDlVQ1U2WndvZGcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tYnZod20iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VuzZXJ2aWNlLWFjY291bnQudWlkIjoiYzExNmZjMWUtYmI4My00MTM5LWI4Yz2hib2FyZC1hZG1pbiJ9.fkhA8aXAidNBIvytgfAIK3v5-8cibO0Ub4dsUTzF1BymraFOA-MZmnEn6yIUuhouh5jOcAzCOGlwrbxwjWM44azAm4YLk6E8WtgM4AoDbJDXY2UqrPP2xYdkLiPwqXSB6gVR5wxMMbkH3AIpmn5yilL7ocb0-N9m4Gdsu1ummIi7a5cdH4vtqCG_qO-qtlXwG_UGDbq6QOsVMJ4VxsmlOk3uPa746gG51BFZhaIm9b1Z9JhimJjPvbe_Gy7rgY9V1CieOJmDoev0IbjdDm58yDOSgsPVfJoBzRheo08N6bky0Kt0lMDOBSupw

6.查看外部訪問端口,也就是之前我們創(chuàng)建的 Service:

kubectl get svc --all-namespaces | grep dashboard

k8s集群搭建,kubernetes,docker,容器
7.在瀏覽器訪問dashboard,網(wǎng)址輸入【集群IP:端口號】如:https://192.168.79.102:32031/可以訪問web管理界面。出現(xiàn)以下界面時繼續(xù)訪問地址即可。
k8s集群搭建,kubernetes,docker,容器
輸入之前生成的token登錄dashboard:
k8s集群搭建,kubernetes,docker,容器
此時已經(jīng)成功進(jìn)入,可以通過dashboard管理kubernetes集群資源了:
k8s集群搭建,kubernetes,docker,容器

四、參考資料

1.kubernetes官網(wǎng)
2.k8s集群環(huán)境的搭建
3.Kubernetes(v1.21)安裝

五、拓展

kubernetes知識學(xué)習(xí)
k8s常用命令文章來源地址http://www.zghlxwxcb.cn/news/detail-784161.html

#部署yaml文件:
kubectl apply -f xxx.yaml

#獲取節(jié)點和服務(wù)版本信息,并查看附加信息
kubectl get nodes -o wide

#獲取pod信息,默認(rèn)是default名稱空間
kubectl get pod

#獲取pod信息,默認(rèn)是default名稱空間,并查看附加信息
#kubectl get pod -o wide

#獲取指定名稱空間的pod
kubectl get pod -n kube-system

#獲取指定名稱空間中的指定pod
kubectl get pod -n kube-system podName

#獲取所有名稱空間的pod
kubectl get pod -A

#查看所有名稱空間的service信息
kubectl get svc -A

#查看componentstatuses信息
kubectl get cs

#查看所有deployments信息
kubectl get deploy -A

#查看所有replicasets信息
kubectl get rs -A

#查看所有statefulsets信息
kubectl get sts -A

#查看所有jobs信息
kubectl get jobs -A

到了這里,關(guān)于K8s集群搭建教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Containerd+Kubernetes搭建k8s集群

    Containerd+Kubernetes搭建k8s集群

    視頻教程地址:https://space.bilibili.com/3461573834180825/channel/seriesdetail?sid=3316691 之前寫了一篇基于docker安裝kubernetes的文章,這篇文檔我們來使用containerd來安裝kubernetes,相較于docker,containerd運(yùn)行容器的時候效率更高,并且可以兼容docker鏡像?;赿ocker安裝kubernetes的文章地址:ht

    2024年02月07日
    瀏覽(26)
  • Kubernetes(K8s)使用 kubeadm 方式搭建多 master 高可用 K8s 集群

    Kubernetes(K8s)使用 kubeadm 方式搭建多 master 高可用 K8s 集群

    本篇主要針對上篇文章的單 master 節(jié)點的 K8s 集群上搭建多 master 節(jié)點集群 和 LB 負(fù)載均衡服務(wù)器。 Kubernetes(K8S)集群搭建基礎(chǔ)入門教程 虛擬機(jī) IP 地址: IP 操作系統(tǒng) 主機(jī)名稱 192.168.2.121 centos7.9 k8s-master01 192.168.2.124 centos7.9 k8s-master02 192.168.2.125 centos7.9 k8s-node01 192.168.2.126 centos

    2023年04月26日
    瀏覽(34)
  • Kubernetes(k8s)上搭建nacos集群

    Kubernetes(k8s)上搭建nacos集群

    你需要準(zhǔn)備一個Kubernetes集群,如圖我的集群已經(jīng)準(zhǔn)備完畢: nacos可以將配置文件存儲到數(shù)據(jù)庫當(dāng)中,所以我們要先準(zhǔn)備一個擁有nacos數(shù)據(jù)表結(jié)構(gòu)的數(shù)據(jù)庫,這樣的數(shù)據(jù)庫鏡像我已經(jīng)準(zhǔn)備好了,當(dāng)然你也可以自己制作這個鏡像: 我之前寫過一篇Kubernetes上安裝數(shù)據(jù)庫的文章:h

    2024年02月03日
    瀏覽(35)
  • 【云原生-K8s】kubeadm搭建安裝k8s集群v1.25版本完整教程【docker、網(wǎng)絡(luò)插件calico、中間層cri-docker】

    【云原生-K8s】kubeadm搭建安裝k8s集群v1.25版本完整教程【docker、網(wǎng)絡(luò)插件calico、中間層cri-docker】

    從 k8s 1.24開始,dockershim已經(jīng)從kubelet中移除,但因為歷史問題docker卻不支持kubernetes主推的CRI(容器運(yùn)行時接口)標(biāo)準(zhǔn),所以docker不能再作為k8s的容器運(yùn)行時了,即從k8s v1.24開始不再使用docker了 但是如果想繼續(xù)使用docker的話,可以在kubelet和docker之間加上一個中間層cri-docker。

    2024年02月03日
    瀏覽(59)
  • 二進(jìn)制搭建 Kubernetes與k8s集群搭建(一)

    二進(jìn)制搭建 Kubernetes與k8s集群搭建(一)

    目錄 二進(jìn)制搭建 Kubernetes v1.20 ? ? 操作系統(tǒng)初始化配置 部署 docker引擎 部署 etcd 集群 準(zhǔn)備簽發(fā)證書環(huán)境 在 master01 節(jié)點上操作 ? ?? 生成Etcd證書 在 node01 節(jié)點上操作 在 node02 節(jié)點上操作 部署 Master 組件 在 master01 節(jié)點上操作 部署 Worker Node 組件 在所有 node 節(jié)點上操作 在 mas

    2024年02月06日
    瀏覽(25)
  • 基于Docker的K8s(Kubernetes)集群部署

    基于Docker的K8s(Kubernetes)集群部署

    開始搭建k8s集群 三臺服務(wù)器修改主機(jī)名稱 關(guān)閉對話窗口,重新連接 三臺主機(jī)名稱呢就修改成功了。 接下來修改每臺節(jié)點的 hosts 文件 所有節(jié)點關(guān)閉 setLinux 查看是否關(guān)閉成功 為每個節(jié)點添加 k8s 數(shù)據(jù)源 如果安裝docker數(shù)據(jù)源找不到y(tǒng)um-config 所有節(jié)點安裝kubelet kubelet安裝中… k

    2024年02月08日
    瀏覽(25)
  • 使用containerd從0搭建k8s(kubernetes)集群

    準(zhǔn)備兩臺服務(wù)器節(jié)點,如果需要安裝虛擬機(jī),可以參考《wmware和centos安裝過程》 機(jī)器名 IP 角色 CPU 內(nèi)存 centos01 192.168.109.130 master 4核 2G centos02 192.168.109.131 node 4核 2G 設(shè)置主機(jī)名,所有節(jié)點都執(zhí)行 關(guān)閉防火墻,所有節(jié)點都執(zhí)行 關(guān)閉swap內(nèi)存,所有節(jié)點都執(zhí)行 配置網(wǎng)橋,所有節(jié)點

    2024年02月08日
    瀏覽(42)
  • 【kubernetes】k8s高可用集群搭建(三主三從)

    【kubernetes】k8s高可用集群搭建(三主三從)

    目錄 【kubernetes】k8s高可用集群搭建(三主三從) 一、服務(wù)器設(shè)置 二、環(huán)境配置 1、關(guān)閉防火墻 2、關(guān)閉selinux 3、關(guān)閉swap 4、修改主機(jī)名(根據(jù)主機(jī)角色不同,做相應(yīng)修改) 5、主機(jī)名映射 6、將橋接的IPv4流量傳遞到iptables的鏈 7、時間同步 8、master之間進(jìn)行免密登錄設(shè)置 三、

    2024年02月09日
    瀏覽(23)
  • 本地k8s集群搭建保姆級教程(3)-安裝k8s集群

    本地k8s集群搭建保姆級教程(3)-安裝k8s集群

    1.1 增加鏡像替換腳本 注意:請在master機(jī)器上執(zhí)行 添加腳本內(nèi)容: 1.2 查看k8s版本 1.3 執(zhí)行腳本 2.1 初始化master節(jié)點 在master機(jī)器上執(zhí)行如下命令: 說明: –apiserver-advertise-address= 你master節(jié)點的ip 看到如下內(nèi)容,說明master節(jié)點初始化成功 圖片中最后一行記得要保存起來,worker節(jié)

    2024年02月15日
    瀏覽(20)
  • kubernetes(k8s)安裝、集群搭建、可視化界面、完全卸載

    kubernetes(k8s)安裝、集群搭建、可視化界面、完全卸載

    官網(wǎng):https://kubernetes.io/zh-cn/docs/concepts/overview/ Kubernetes 是一個可移植、可擴(kuò)展的開源平臺, 用于管理容器化的工作負(fù)載和服務(wù) ,可促進(jìn)聲明式配置和自動化。 Kubernetes 作用: 服務(wù)發(fā)現(xiàn)和負(fù)載均衡 Kubernetes 可以使用 DNS 名稱或自己的 IP 地址來暴露容器。 如果進(jìn)入容器的流量很

    2024年02月02日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包