centos搭建k8s環(huán)境詳細(xì)步驟及常用命令
前言
這篇文章講解如何在centos搭建k8s環(huán)境,主要內(nèi)容包括docker環(huán)境、docker私有鏡像倉(cāng)庫(kù)搭建、k8s環(huán)境搭建三個(gè)部分。
一、環(huán)境準(zhǔn)備
1.1 安裝要求
部署k8s集群需要以下條件:
- 至少三臺(tái)服務(wù)器,使用Centos7版本操作系統(tǒng)。
- 內(nèi)存大于等于2G,CPU大于等于2核,硬盤(pán)大于等于30G。
- 需要下載鏡像,因此必須能夠訪問(wèn)外網(wǎng)。
- 禁止swap分區(qū)。
1.2 準(zhǔn)備環(huán)境
- 新安裝的Centos7.9服務(wù)器需要配置靜態(tài)網(wǎng)絡(luò):
打開(kāi)網(wǎng)絡(luò)配置文件:
cd /etc/sysconfig/network-scripts/
將以下內(nèi)容添加進(jìn)去,其中BOOTPROTO="static"表示靜態(tài)網(wǎng)絡(luò),NAME和DEVICE填網(wǎng)卡驅(qū)動(dòng)如果沒(méi)有驅(qū)動(dòng)需要手動(dòng)安裝即可;下面添加IP、子網(wǎng)掩碼以及網(wǎng)關(guān)、DNS等內(nèi)容。
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp8s0" DEVICE="enp8s0" ONBOOT="yes" IPADDR="192.168.1.180" NETMASK="255.255.255.0" GATEWAY="192.168.1.1" DNS1="192.168.1.1"
- 由于之前已經(jīng)有三臺(tái)服務(wù)器主機(jī)名分別是master、node1、node2,因此本次安裝三臺(tái)服務(wù)器依次為node3、node4、node5。
| 角色 | 名稱(chēng) | IP |
|---|---|---|
| 主節(jié)點(diǎn) | node3 | 192.168.1.180 |
| 子節(jié)點(diǎn)1 | node4 | 192.168.1.181 |
| 子節(jié)點(diǎn)2 | node5 | 192.168.1.182 |
- 在新搭建的centos7.9操作系統(tǒng)上進(jìn)行初始化:
#永久關(guān)閉防火墻 systemctl stop firewalld systemctl disable firewalld #關(guān)閉swap sed -ri 's/.*swap.*/#&/' /etc/fstab # 三臺(tái)服務(wù)器設(shè)置主機(jī)名 hostnamectl set-hostname <hostname> #三臺(tái)服務(wù)器添加hosts 192.168.1.180 node3 192.168.1.181 node4 192.168.1.182 node5
一、Docker環(huán)境
Docker是一種較新的虛擬化方式,使用容器技術(shù)和宿主機(jī)共享硬件資源及操作系統(tǒng),實(shí)現(xiàn)資源的動(dòng)態(tài)分配,在彼此隔離的資源中運(yùn)行應(yīng)用程序。容器包含應(yīng)用和其所有的依賴(lài)包,所有容器共享操作系統(tǒng)內(nèi)核。使用Docker容器可保證應(yīng)用程序快速、可靠、一致地部署,其間不受部署環(huán)境的影響。
1.1 Docker安裝
k8s使用的容器為Docker,需首先安裝Docker環(huán)境。
# 安裝Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
# 檢查Docker是否安裝成功
docker --version
# 啟動(dòng)并設(shè)置Docker開(kāi)機(jī)自啟動(dòng)
systemctl enable docker && systemctl start docker
# 添加Docker阿里云鏡像倉(cāng)庫(kù)
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://xigtegnc.mirror.aliyuncs.com"]
}
EOF
1.2 Docker 私有鏡像倉(cāng)庫(kù)
Docker私有鏡像倉(cāng)庫(kù)使用官方提供的registry完成
# 拉取registry鏡像 docker pull registry # 啟動(dòng)registry鏡像,確定啟動(dòng)方式、是否重啟、以及掛載目錄、容器名字 docker run -itd -p 5000:5000 --restart always -v /opt/data/registry/:/var/lib/registry --name registry registry # 驗(yàn)證是否搭建成功,瀏覽器打開(kāi)網(wǎng)址:http://IP:port/v2/_catalog,成功說(shuō)明鏡像倉(cāng)庫(kù)搭建成功。 http://192.168.1.180:5000/v2/_catalog # 將鏡像發(fā)布到倉(cāng)庫(kù)中 # 1、docker tag命令給鏡像打標(biāo)簽:docker tag imageName:version: IP:Port/tagedImageName:tagedVersion docker tag nginx:latest 192.168.1.180:5000/mynginx:1.0 # 2、將鏡像推送至倉(cāng)庫(kù):docker push IP:Port/tagedImageName:tagedVersion docker push 192.168.1.180:5000/mynginx:1.0 # 3、驗(yàn)證私有倉(cāng)庫(kù)是否已經(jīng)存在該鏡像:http://IP:port/v2/_catalog http://192.168.1.180:5000/v2/_catalog # 4、從私有倉(cāng)庫(kù)拉取鏡像:docker pull IP:Port/tagedImageName:tagedVersion
從其他服務(wù)器發(fā)布鏡像到Docker私有倉(cāng)庫(kù)時(shí),報(bào)錯(cuò):server gave HTTP response to HTTPS client,解決方法:在推送鏡像的服務(wù)器配置insecure-registries
vim /etc/docker/daemon.json
# 添加insecure-registries
{
"registry-mirrors": ["https://xigtegnc.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.1.180:5000","http://47.104.139.172:5000"]
}
從私有倉(cāng)庫(kù)拉取鏡像時(shí),如果Docker版本大于等于1.3.x,會(huì)有無(wú)法建立連接的報(bào)錯(cuò)。原因:Docker1.3.x之后,docker registry交互的默認(rèn)方式為HTTPS,但是搭建的私有倉(cāng)庫(kù)默認(rèn)使用HTTP服務(wù),解決辦法,在私有鏡像所在服務(wù)器的docker.service 中添加上 insecure-registry:
vi /usr/lib/systemd/system/docker.service # 找到ExecStart位置,在后面加上 --insecure-registry IP:Port ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.180:5000 # 重啟服務(wù) systemctl daemon-reload systemctl restart docker
到此Docker環(huán)境,Docker私有鏡像環(huán)境,以及向私有鏡像推鏡像,從私有鏡像拉鏡像內(nèi)容已完成,下一步是k8s環(huán)境部署。
二、K8S環(huán)境部署
- 添加阿里云YUM軟件源,加快下載速度。
# 添加阿里云YUM軟件源 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
- 安裝kubeadm、kubectl和kubelet
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 systemctl enable kubelet
- 集群初始化,在master執(zhí)行
kubeadm init \ --apiserver-advertise-address=192.168.1.180 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
- 使用kubectl工具,在master執(zhí)行
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 查看集群所有nodes kubectl get nodes
- 向k8s集群中添加節(jié)點(diǎn)
在節(jié)點(diǎn)上執(zhí)行以下命令,需復(fù)制上面master節(jié)點(diǎn)操作生成的真實(shí)命令。
kubeadm join 192.168.1.11:6443 --token esce21.q6hetwm8si29qxwn \
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
- 部署CNI網(wǎng)絡(luò)插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 查看是否部署成功 kubectl get pods -n kube-system
- 安裝NFS
# 在選定的NFS服務(wù)器上執(zhí)行 yum install nfs-utils -y # 設(shè)置共享目錄 /usr/project/data/nfs # 將共享目錄以讀寫(xiě)權(quán)限暴露給需要使用該NFS的主機(jī) vim /etc/exports # 加入以下內(nèi)容 /usr/project/data/nfs 192.168.1.0/24(rw,no_root_squash,no_all_squash,sync) # 啟動(dòng)NFS服務(wù) systemctl restart nfs
- 測(cè)試k8s集群
在k8s集群中創(chuàng)建一個(gè)nginx的pod進(jìn)行校驗(yàn)
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get pod,svc # 可通過(guò) http: //NodeIP:Port形式訪問(wèn)
三、Docker常用命令
# docker系統(tǒng)操作
# 啟動(dòng)、關(guān)閉、重啟docker
systemctl start docker
systemctl stop docker
systemctl restart docker
# 設(shè)置docker開(kāi)機(jī)自啟動(dòng)
systemctl enable docker
# 查看docker信息
docker version
docker info
# 鏡像
# 從鏡像倉(cāng)庫(kù)拉取鏡像
docker pull IP:Port/imageName:imageTag
docker pull 192.168.1.180:5000/aengus/flow:v1.0
# 如果不使用IP:Port,默認(rèn)從docker官方倉(cāng)庫(kù)拉取
docker pull nginx
# 查看所有鏡像
docker images
# 刪除鏡像(不被任何容器使用方可刪除)
docker rmi imageName
# 強(qiáng)制刪除鏡像
docker image rm imageName
# 使用Dockerfile制作鏡像
docker build -t imageName:imageTag .
# 為鏡像打標(biāo)簽
docker tag imageName:imageTag IP:Port/tagedImageName:tagedImageTag
# 向私有倉(cāng)庫(kù)推送鏡像
docker push IP:Port/tagedImageName:tagedImageTag
# 容器
# 查看正在運(yùn)行的容器
docker ps
# 查看所有容器
docker ps -a
# 進(jìn)入容器(只能進(jìn)入正在運(yùn)行的容器,-it后面跟容器id)
docker exec -it b648cde72e9c /bin/bash
# 如果上條命令不能進(jìn)入,可以嘗試
docker exec -it b648cde72e9c /bin/sh
# 查看容器日志
docker logs -f containerId
# 啟動(dòng)容器
docker run -itd -p 5000:5000 --restart always -v /opt/data/registry/:/var/lib/registry --name registry registry
# -i: 以交互模式運(yùn)行容器; -t: 為容器重新分配一個(gè)偽輸入終端 -it通常連用。 -d:后臺(tái)運(yùn)行容器; -p:指定端口映射 宿主機(jī)端口:容器端口; --restart always:在容器退出時(shí)總是重啟; -v:目錄映射 宿主機(jī)目錄:容器目錄; --name:容器名字 最后的registry指定使用的鏡像為registry
# 停止容器
docker stop containerId
# 刪除容器
docker rm -f containerId
# 啟動(dòng)容器
docker start containerId
# 重啟容器
docker restart containerId
# 刪除異常停止的容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
# 清除所有無(wú)容器使用的鏡像和容器,包括容器臨時(shí)停止。此命令會(huì)刪除無(wú)用容器,再刪除無(wú)用鏡像,需慎用
docker system prune -a
四、K8S常用命令
# 查看命名空間 kubectl get ns # 創(chuàng)建命名空間 kubectl create namespace heu # kubectl語(yǔ)法 kubectl [command] [TYPE] [NAME] [flags] # command:指定要在資源上執(zhí)行的操作例如create、get、describe、delete、apply等; type:指定資源類(lèi)型(pod、node、services、deployment); name: 指定資源名稱(chēng); flags:可選參數(shù),例如使用-n指定命名空間 # 以下命令均為操作某一命名空間下的資源 # 查看資源命令 get # 查看指定命名空間下的pod kubectl get pod -n heu # 查看指定命名空間下的deployment kubectl get deployment-n heu # 查看指定命名空間下的service kubectl get service -n heu # 查看指定命名空間下的configMap kubectl get configmap -n heu # 查看指定命名空間下的secret kubectl get secret -n heu # 查看資源詳細(xì)信息 describe kubectl describe pod mynginx -n heu #查看pod的具體運(yùn)行情況 kubectl describe deployment mynginx -n heu #了解deployment的詳細(xì)信息 kubectl describe replicaset mynginx -n heu #了解replicaset的詳細(xì)信息 kubectl describe secret mynginx -n heu #查看secret信息 kubectl describe configmap mynginx -n heu #查看configmap信息 # 通過(guò)配置文件部署資源 kubectl apply -f gateway.yaml # 查看pod日志: kubectl logs podId -n heu # 進(jìn)入容器 kubectl exec -it podId -n heu /bin/bash # 縮放副本數(shù)量 kubectl scale deployment mynginx --replicas=2 # 刪除資源 delete kubectl delete podmynginx -n heu # 單純刪除pod可能無(wú)法刪除,原因是deployment會(huì)維持重復(fù)數(shù)量 kubectl delete deployment mynginx -n heu kubectl delete service mynginx -n heu kubectl delete configmap mynginx -n heu # 刪除所有 kubectl delete deployment --all -n heu kubectl delete service --all -n heu kubectl delete configmap --all -n heu
總結(jié)
文章對(duì)K8s環(huán)境的搭建進(jìn)行了描述,給出Docker、Docker倉(cāng)庫(kù)、k8s環(huán)境的搭建步驟,并給出常見(jiàn)報(bào)錯(cuò)和解決辦法。
到此這篇關(guān)于centos搭建k8s環(huán)境詳細(xì)步驟及常用命令的文章就介紹到這了,更多相關(guān)centos搭建k8s環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Kubernetes k8s configmap 容器技術(shù)解析
這篇文章主要為大家介紹了k8s configmap 容器技術(shù)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
kubernetes?部署dashboard最新詳細(xì)步驟
這篇文章主要介紹了kubernetes?部署dashboard最新詳細(xì)步驟,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
kubernetes中pod的調(diào)度親和性affinity詳解
本文簡(jiǎn)要介紹了Kubernetes中的三種親和性機(jī)制:節(jié)點(diǎn)親和性(控制Pod調(diào)度到指定節(jié)點(diǎn))、Pod親和性(與特定Pod共處同一節(jié)點(diǎn))和Pod反親和性(避免與特定Pod共處同一節(jié)點(diǎn)),并通過(guò)示例說(shuō)明了其配置方式及實(shí)際調(diào)度效果2025-09-09
k8s強(qiáng)制刪除一個(gè)Pod的詳細(xì)步驟
有時(shí)候遇到node宕機(jī)或者失聯(lián)太久導(dǎo)致pod一直處于Terminating狀態(tài),kubectl?delete又刪不掉,其實(shí)這個(gè)pod已經(jīng)確定已經(jīng)死了,需要強(qiáng)制把他摘掉,這篇文章主要給大家介紹了關(guān)于k8s強(qiáng)制刪除一個(gè)Pod的詳細(xì)步驟,需要的朋友可以參考下2024-11-11
通過(guò)kubernetes部署nginx+php網(wǎng)站環(huán)境過(guò)程
本文詳細(xì)介紹了如何在Kubernetes中部署Nginx+PHP網(wǎng)站環(huán)境,包括環(huán)境準(zhǔn)備、部署步驟、Service、ConfigMap、Ingress等配置,并提供了具體的YAML文件示例和命令,通過(guò)這些步驟,可以實(shí)現(xiàn)高可用、可擴(kuò)展的Web服務(wù)2026-01-01

