欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

云原生與k8s集群構(gòu)建全過程

 更新時間:2025年05月29日 17:29:51   作者:fengchengwu2012  
這篇文章主要介紹了云原生與k8s集群構(gòu)建全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、云原生和kubernetes

1、云原生的概念

云是和本地相對的,傳統(tǒng)的應(yīng)用必須跑在本地服務(wù)器上,現(xiàn)在流行的應(yīng)用都跑在云端,云包含了IaaS、PaaS和SaaS。原生就是土生土長的意思,我們在開始設(shè)計應(yīng)用的時候就考慮到應(yīng)用將來是運行云環(huán)境里面的,要充分利用云資源的優(yōu)點,比如?云服務(wù)的彈性和分布式優(yōu)勢。

云原生是基于分布部署和統(tǒng)一運管的云端服務(wù),以容器、微服務(wù)、DevOps等技術(shù)為基礎(chǔ)建立的一套云技術(shù)產(chǎn)品體系。云原生指的是一個靈活的工程團隊,遵循敏捷的研發(fā)原則,使用高度自動化的研發(fā)工具,開發(fā)專門基于并部署在云基礎(chǔ)設(shè)施上的應(yīng)用,以滿足快速變化的客戶需求。這些應(yīng)用采用自動化的,可擴展的,和高可用的架構(gòu)。這個工程團隊通過高效的云計算現(xiàn)網(wǎng)的運維來提供這一應(yīng)用服務(wù),并且根據(jù)線上反饋對服務(wù)進行不斷地改進。

2、云原生的組成

云原生 = 微服務(wù) + DevOps + 持續(xù)交付 + 容器化。

微服務(wù)是一種軟件開發(fā)技術(shù),它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價值。微服務(wù)體系結(jié)構(gòu)有許多重要的好處。首先,它解決了業(yè)務(wù)復(fù)雜性的問題。它將原來龐大的單個應(yīng)用程序分解為一組服務(wù)。盡管功能的總數(shù)保持不變,但應(yīng)用程序已被分解為可管理的服務(wù)。單個服務(wù)的開發(fā)速度要快得多,而且更容易理解和維護。其次,這種架構(gòu)允許每個服務(wù)由一個團隊獨立開發(fā)。開發(fā)人員可以自由選擇任何適當?shù)募夹g(shù)。第三,微服務(wù)架構(gòu)模式允許各個服務(wù)獨立部署。開發(fā)人員永遠不需要協(xié)調(diào)對其服務(wù)的本地更改的部署。這些類型的更改可以在測試后立即部署。最后,微服務(wù)體系結(jié)構(gòu)允許每個服務(wù)獨立擴展。

DevOps的意思就是開發(fā)和運維不再是分開的兩個團隊,而是你中有我,我中有你的一個團隊。我們現(xiàn)在開發(fā)和運維已經(jīng)是一個團隊了,但是運維方面的知識和經(jīng)驗還需要持續(xù)提高。

持續(xù)交付的意思就是在不影響用戶使用服務(wù)的前提下頻繁把新功能發(fā)布給用戶使用,要做到這點非常非常難。我們現(xiàn)在兩周一個版本,每次上線之后都會給不同的用戶造成不同程度的影響。

容器化的好處在于運維的時候不需要再關(guān)心每個服務(wù)所使用的技術(shù)棧了,每個服務(wù)都被無差別地封裝在容器里,可以被無差別地管理和維護,現(xiàn)在比較流行的工具是docker和k8s。

3、云原生與k8s

k8s是云原生的重要組成部分, k8s由Node、Pod、Service、Volume、Label等組成。

Master

  • 集群控制節(jié)點,每個集群需要至少一個master節(jié)點負責(zé)集群的管控;

Node

  • 工作負載節(jié)點,由master分配容器到這些node工作節(jié)點上,然后node節(jié)點上的docker 負責(zé)容器的運行,運行真正的應(yīng)用程序,在Node上Kubernetes管理的最小運行單元是Pod。
  • Node上運行著Kubernetes的Kubelet、kube-proxy服務(wù)進程,這些服務(wù)進程負責(zé)Pod的創(chuàng)建、啟動、監(jiān)控、重啟、銷毀、以及實現(xiàn)軟件模式的負載均衡。

Node包含的信息:

  • Node地址:主機的IP地址,或Node ID。
  • Node的運行狀態(tài):Pending、Running、Terminated三種狀態(tài)。
  • Node系統(tǒng)容量(Node Condition):描述Node可用的系統(tǒng)資源,包括CPU、內(nèi)存、最大可調(diào)度Pod數(shù)量等。
  • 其他:內(nèi)核版本號、Kubernetes版本等。

Pod

  • Pod是Kubernetes最基本的操作單元,包含一個或多個緊密相關(guān)的容器,一個Pod可以被一個容器化的環(huán)境看作應(yīng)用層的“邏輯宿主機”;
  • 一個Pod中的多個容器應(yīng)用通常是緊密耦合的,Pod在Node上被創(chuàng)建、啟動或者銷毀;每個Pod里運行著一個特殊的被稱之為Pause的容器,其他容器則為業(yè)務(wù)容器,這些業(yè)務(wù)容器共享Pause容器的網(wǎng)絡(luò)棧和Volume掛載卷,因此他們之間通信和數(shù)據(jù)交換更為高效,在設(shè)計時我們可以充分利用這一特性將一組密切相關(guān)的服務(wù)進程放入同一個Pod中。同一個Pod里的容器之間僅需通過localhost就能互相通信。

一個Pod中的應(yīng)用容器共享同一組資源:

  • PID命名空間:Pod中的不同應(yīng)用程序可以看到其他應(yīng)用程序的進程ID;
  • 網(wǎng)絡(luò)命名空間:Pod中的多個容器能夠訪問同一個IP和端口范圍;
  • IPC命名空間:Pod中的多個容器能夠使用SystemV IPC或POSIX消息隊列進行通信;
  • UTS命名空間:Pod中的多個容器共享一個主機名;
  • Volumes(共享存儲卷):Pod中的各個容器可以訪問在Pod級別定義的Volumes;Pod的生命周期通過Replication Controller來管理;通過模板進行定義,然后分配到一個Node上運行,在Pod所包含容器運行結(jié)束后,Pod結(jié)束。

Controller

  • 控制器,通過它來實現(xiàn)對pod的管理,比如啟動、停止、伸縮pod的數(shù)量。

Service

pod對外服務(wù)的統(tǒng)一入口,下面可以維護者同一類的多個pod。在Kubernetes的世界里,雖然每個Pod都會被分配一個單獨的IP地址,但這個IP地址會隨著Pod的銷毀而消失,這就引出一個問題:

  • 如果有一組Pod組成一個集群來提供服務(wù),那么如何來訪問它呢?Service!一個Service可以看作一組提供相同服務(wù)的Pod的對外訪問接口,Service作用于哪些Pod是通過Label Selector來定義的。擁有一個指定的名字(比如my-mysql-server);
  • 擁有一個虛擬IP(Cluster IP、Service IP或VIP)和端口號,銷毀之前不會改變,只能內(nèi)網(wǎng)訪問;
  • 能夠提供某種遠程服務(wù)能力;被映射到了提供這種服務(wù)能力的一組容器應(yīng)用上;
  • 如果Service要提供外網(wǎng)服務(wù),需指定公共IP和NodePort,或外部負載均衡器;
  • NodePort 系統(tǒng)會在Kubernetes集群中的每個Node上打開一個主機的真實端口,這樣,能夠訪問Node的客戶端就能通過這個端口訪問到內(nèi)部的Service了

Label

  • 標簽,用于對pod進行分類,同一類pod會擁有相同的標簽。
  • Label以key/value的形式附加到各種對象上,如Pod、Service、RC、Node等,以識別這些對象,管理關(guān)聯(lián)關(guān)系等,如Service和Pod的關(guān)聯(lián)關(guān)系。

NameSpace

  • 命名空間,用來隔離pod的運行環(huán)境。

二、k8s集群搭建

集群架構(gòu)圖

1、系統(tǒng)環(huán)境準備

三臺centos7虛擬機,主機名分別為master(192.168.2.8)、slave1(192.168.2.9)、 slave2(192.168.2.10),并安裝好docker環(huán)境, docker安裝成功后檢測如下:

安裝好docker后,進行如下設(shè)置

關(guān)閉 防火墻 、selinux、swap分區(qū)

  systemctl stop firewalld && systemctl disable firewalld
  
  sed   -i   's/enforcing/disabled/' /etc/selinux/config 

  sed   -ri   's/.*swap.*/#&/'  /etc/fstab

將橋接IPv4 流量傳遞到iptables鏈

cat > /etc/sysctl.d/k8s.conf <<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
  生效操作:
  sysctl  --system    (sysctl -p /etc/sysctl.d/k8s.conf)

同步主機的時間

yum install ntpdate -y
ntpdate -u time.windows.com

生成CA秘鑰、Certificates證書

在master節(jié)點安裝CFSSL工具用來建立TLS certificates

export CFSSL_URL="https://pkg.cfssl.org/R1.2"
wget "${CFSSL_URL}/cfssl_linux-amd64" -O /usr/local/bin/cfssl
wget "${CFSSL_URL}/cfssljson_linux-amd64" -O /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson

在/etc/etcd/ssl目錄下創(chuàng)建ca-config.json、etcd-ca-csr.json秘鑰配置用于生成CA的秘鑰。etcd-csr.json秘鑰配置用于生成Certificate證書

mkdir -p /etc/etcd/ssl && cd /etc/etcd/ssl

#ca-config.json
{
	"signing": {
		"default": {
			"expiry": "8760h"
		},
		"profiles": {
			"kubernetes": {
				"usages": [
					"signing",
					"key encipherment",
					"server auth",
					"client auth"
				],
				"expiry": "8760h"
			}
		}
	}
}


#etcd-ca-csr.json
{
	"CN": "kubernetes",
	"key": {
		"algo": "rsa",
		"size": 2048
	},
	"names": [{
		"C": "CN",
		"ST": "HeNan",
		"L": "ZhengZhou",
		"O": "k8s",
		"OU": "wmy"
	}]
}


#etcd-csr.json   其中hosts為集群的ip
{
  "CN": "etcd",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "hosts": [
    "127.0.0.1",
    "192.168.2.8",
    "192.168.2.9",
    "192.168.2.10"
  ],
  "names": [
    {
      "C": "CN",
      "L": "ZhengZhou",
      "O": "etcd",
      "OU": "etcd Security",
      "ST": "ZhengZhou"
    }
  ]
}

生成CA秘鑰文件

 cfssl gencert -initca etcd-ca-csr.json | cfssljson -bare etcd-ca

?? 生成 kube-apiserver certificate 證書

cfssl gencert  -ca=etcd-ca.pem   -ca-key=etcd-ca-key.pem -config=ca-config.json -profile=kubernetes  etcd-csr.json | cfssljson -bare etcd

最終生產(chǎn)5個證書文件

將5個文件分發(fā)到salve1 、salve2相應(yīng)的目錄上

    scp   -r  /etc/etcd/ssl  root@slave1:/etc/etcd/ssl 
    scp   -r  /etc/etcd/ssl  root@slave2:/etc/etcd/ssl 

2、k8s集群部署

添加阿里云的鏡像源

cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF


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
#exclude= kubeadm kubelet  kubectl
EOF

安裝 kubeadm,kubelet 、kubectl

其中kubelet分布在集群中的每個節(jié)點,負責(zé)啟動pod容器,kubeadm用于初始化k8s集群, kubectl用于增刪查各種k8s的資源的工具類。

#cnetos安裝
yum install -y  kubelet-1.23.15   kubeadm-1.23.15  kubectl-1.23.15

systemctl enable kubelet  --now

注:如果kubelet無法正常啟動(journalctl -xeu kubelet 查看啟啟動日志),一般情況下檢查一下/etc/docker/daemon.json是否存在以下配置:

"exec-opts": [
    "native.cgroupdriver=systemd"
  ],

修改后重啟docker: systemctl restart docker

部署Kubernetes Master

在 192.168.2.8(Master)執(zhí)行為了提高安裝成功率,安裝之前先做一次重置,指定阿里 云鏡像倉庫地址

   kubeadm reset
   #替換鏡像地址
   kubeadm config images list
   kubeadm config images list  --image-repository registry.aliyuncs.com/google_containers
   #拉鏡像
   kubeadm config images pull  --image-repository registry.aliyuncs.com/google_containers  

集群主機節(jié)點初始化操作

 kubeadm init \
--apiserver-advertise-address=192.168.2.8 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.15 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

主節(jié)點初始化成功后,下載安裝 Pod 網(wǎng)絡(luò)插件(cni-plugins-linux-amd64-v1.1.1.tgz)

mkdir -p /opt/cni/bin
tar -C /opt/cni/bin -zxvf cni-plugins-linux-amd64-v1.1.1.tgz
yum install kubernetes-cni -y

網(wǎng)絡(luò)cni有多重方式,這里提供兩種fannel 和calico

##fannel方式
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
kubectl  apply  –f  kube-fannel.yml

------------------------------------------------------------------------------------

##calico方式
wget https://docs.projectcalico.org/manifests/calico.yaml
將calico.yaml中引用的鏡像提前拉取
docker pull docker.io/calico/node:v3.26.1
docker pull docker.io/calico/kube-controllers:v3.26.1
docker pull docker.io/calico/cni:v3.26.1  
修改calico.yaml中CALICO_IPV4POOL_CIDR的網(wǎng)段與集群初始化時候的保持一直
 - name: CALICO_IPV4POOL_CIDR
   value: "10.244.0.0/16" 
kubectl  apply  –f  calico.yaml

初始化工作節(jié)點

向集群添加新節(jié)點,執(zhí)行在 kubeadm init 輸出的 kubeadm join 命令(證書在master安裝

后會 直接顯示出來,直接拷貝過來)

kubeadm join 192.168.2.8:6443 --token 7s9vq1.4d5kp8yubatwjzgr 
    --discovery-token-ca-cert-hash sha256:5b042272bbd8b8692581202ba7dba8e1721078facb40878485d40bde8b1d986e --ignore-preflight-errors=all

注:如果token過期可以使用以下方式創(chuàng)建查詢

#查看token
kubeadm token  list  

#創(chuàng)建token
kubeadm token create --print-join-command

查看k8s集群

kubectl  get nodes

如果節(jié)點的狀態(tài)為NotReady,查詢?nèi)罩具M行排查:

journalctl -f -u kubelet.service

kubectl  describe  node  nodename

驗證k8s集群環(huán)境

在 Kubernetes 集群中創(chuàng)建一個 pod,安裝nignx鏡像容器

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

注:可以通過下面的方式生成部署的yaml文件

kubectl create deployment nginx --image=nginx --dry-run -o yaml

查看nignx的端口

訪問nignx的默認頁面 http://192.168.2.8:31521

kubernetes-dashboard安裝

命令行操作不是很方便,可以安裝部署kubepi可視化操作

 docker pull kubeoperator/kubepi-server

 docker run --privileged -itd --restart=unless-stopped --name kube_dashboard -v /home/docker-mount/kubepi/:/var/lib/kubepi/ -p 7110:80 kubeoperator/kubepi-server

創(chuàng)建訪問賬戶、獲取訪問令牌

#創(chuàng)建sa賬戶
kubectl create sa kubepi-user --namespace kube-system

#分配角色
kubectl create clusterrolebinding kubepi-user --clusterrole=cluster-admin --serviceaccount=kube-system:kubepi-user

#查詢訪問令牌token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubepi-user | awk '{print $1}') | grep token: | awk '{print $2}'

#獲取集群地址
cat ~/.kube/config | grep server: | awk '{print $2}'

訪問dashboard管理頁面(http://master:7110/ ),默認賬密(admin/kubepi)

三、k8s常用命令

#開機自啟
systemctl   enable  kubelet 

#禁用自啟
systemctl    disable kubelet  

#刪除從節(jié)點
kubelet  delete  node slave1

#創(chuàng)建命名空間
kubectl create  namespace  ns-test

#查看節(jié)點
kubectl  get nodes
kubectl  get node  -A

#查看執(zhí)行任務(wù)
kubectl  get  job -n ns-test

#查詢pods
kubectl get pods -A
kubectl get pods -n kube-ns-test -o wide


#查詢部署情況
kubectl  describe  ndoe  nodeNamekueb
kubectl  describe  -n  ns-test  svc  <service名>
kubectl  describe  -n  ns-test  deployment    <deployment名>
kubectl  describe  -n  ns-test  pod    <pod名>


#查詢持久卷
kubectl get pv -A

#查詢持久卷聲明
kubectl get  -n  ns-test   pvc

#查詢存儲類型
kubectl get storageclass -A

#副本擴容
kubectl scale --replicas=3   dev

#查看服務(wù)信息
kubectl get svc -A

#查看服務(wù)日志
kubectl  logs  -f  -n  ns-test <pod名>

#服務(wù)交互
kubectl exec -it  -n  ns-test <pod名>  /bin/bash

#刪除pod  deployment  service
kubectl delete  -n   ns-test  pod <pod名> 
kubectl delete  -n   ns-test  deployment <deployment名> 
kubectl delete  -n   ns-test  svc  <service名> 


四、k8s集群卸載

  • k8s 卸載
kubeadm reset -f
yum remove -y kubelet kubeadm kubectl
modprobe -r ipip
lsmod
  • 刪除配置文件
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
  • 更新鏡像
yum clean all
yum makecache

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于CentOS7日志文件及journalctl日志查看方法

    關(guān)于CentOS7日志文件及journalctl日志查看方法

    這篇文章主要介紹了關(guān)于CentOS7日志文件及journalctl日志查看方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • kubernetes部署dashboard及應(yīng)用小結(jié)

    kubernetes部署dashboard及應(yīng)用小結(jié)

    Dashboard?是基于網(wǎng)頁的?Kubernetes?用戶界面,可以對?Deployment?實現(xiàn)彈性伸縮、發(fā)起滾動升級、重啟?Pod?或者使用向?qū)?chuàng)建新的應(yīng)用,這篇文章主要介紹了kubernetes部署dashboard,需要的朋友可以參考下
    2024-06-06
  • K8S?實用工具之合并多個kubeconfig實現(xiàn)詳解

    K8S?實用工具之合并多個kubeconfig實現(xiàn)詳解

    這篇文章主要為大家介紹了K8S?實用工具之合并多個kubeconfig實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 某集團任意文件下載到虛擬主機getshell的方法

    某集團任意文件下載到虛擬主機getshell的方法

    這篇文章主要介紹了某集團任意文件下載到虛擬主機getshell的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • podman容器工具的具體使用

    podman容器工具的具體使用

    本文主要介紹了podman容器工具的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • kubernetes YAML文件的使用

    kubernetes YAML文件的使用

    這篇文章主要介紹了kubernetes YAML文件的使用,幫助大家更好的理解和學(xué)習(xí)使用kubernetes,感興趣的朋友可以了解下
    2021-04-04
  • Kubernetes故障排除有效維護集群的最佳實踐工具

    Kubernetes故障排除有效維護集群的最佳實踐工具

    這篇文章主要為大家介紹了Kubernetes故障排除有效維護集群的最佳實踐工具詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • kubernetes(k8s)中Yaml文件詳解

    kubernetes(k8s)中Yaml文件詳解

    這篇文章主要給大家介紹了關(guān)于kubernetes(k8s)中Yaml文件詳解的相關(guān)資料,YAML是專門用來寫配置文件的語言,非常簡潔和強大,使用比json更方便,需要的朋友可以參考下
    2023-12-12
  • helmfile聲明式部署Helm?Chart使用詳解

    helmfile聲明式部署Helm?Chart使用詳解

    這篇文章主要為大家介紹了helmfile聲明式部署Helm?Chart使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 虛擬化和云計算的區(qū)別分析

    虛擬化和云計算的區(qū)別分析

    這篇文章主要介紹了虛擬化和云計算的區(qū)別,深入淺出的列舉分析了虛擬化與云計算的幾點常見區(qū)別,需要的朋友可以參考下
    2016-10-10

最新評論