中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站建設(shè)成本價(jià)瀏覽器看b站

網(wǎng)站建設(shè)成本價(jià),瀏覽器看b站,深圳企業(yè)網(wǎng)站模板,新網(wǎng)站怎么做才能可以在百度上搜索到二 Kubernetes介紹 1.1 應(yīng)用部署方式演變 在部署應(yīng)用程序的方式上,主要經(jīng)歷了三個(gè)時(shí)代: 傳統(tǒng)部署:互聯(lián)網(wǎng)早期,會(huì)直接將應(yīng)用程序部署在物理機(jī)上 優(yōu)點(diǎn):簡(jiǎn)單,不需要其它技術(shù)的參與 缺點(diǎn):不能為應(yīng)…

二 Kubernetes介紹

1.1 應(yīng)用部署方式演變

在部署應(yīng)用程序的方式上,主要經(jīng)歷了三個(gè)時(shí)代:

  • 傳統(tǒng)部署:互聯(lián)網(wǎng)早期,會(huì)直接將應(yīng)用程序部署在物理機(jī)上

    優(yōu)點(diǎn):簡(jiǎn)單,不需要其它技術(shù)的參與

    缺點(diǎn):不能為應(yīng)用程序定義資源使用邊界,很難合理地分配計(jì)算資源,而且程序之間容易產(chǎn)生影響

  • 虛擬化部署:可以在一臺(tái)物理機(jī)上運(yùn)行多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)都是獨(dú)立的一個(gè)環(huán)境

    優(yōu)點(diǎn):程序環(huán)境不會(huì)相互產(chǎn)生影響,提供了一定程度的安全性

    缺點(diǎn):增加了操作系統(tǒng),浪費(fèi)了部分資源

  • 容器化部署:與虛擬化類似,但是共享了操作系統(tǒng)

    優(yōu)點(diǎn):

    可以保證每個(gè)容器擁有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間等

    運(yùn)行應(yīng)用程序所需要的資源都被容器包裝,并和底層基礎(chǔ)架構(gòu)解耦

    容器化的應(yīng)用程序可以跨云服務(wù)商、跨Linux操作系統(tǒng)發(fā)行版進(jìn)行部署

在這里插入圖片描述

容器化部署方式給帶來很多的便利,但是也會(huì)出現(xiàn)一些問題,比如說:

  • 一個(gè)容器故障停機(jī)了,怎么樣讓另外一個(gè)容器立刻啟動(dòng)去替補(bǔ)停機(jī)的容器
  • 當(dāng)并發(fā)訪問量變大的時(shí)候,怎么樣做到橫向擴(kuò)展容器數(shù)量

這些容器管理的問題統(tǒng)稱為容器編排問題,為了解決這些容器編排問題,就產(chǎn)生了一些容器編排的軟件:

  • Swarm:Docker自己的容器編排工具
  • Mesos:Apache的一個(gè)資源統(tǒng)一管控的工具,需要和Marathon結(jié)合使用
  • Kubernetes:Google開源的的容器編排工具

在這里插入圖片描述

1.2 kubernetes簡(jiǎn)介

在這里插入圖片描述

kubernetes,是一個(gè)全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案,是谷歌嚴(yán)格保密十幾年的秘密武器----Borg系統(tǒng)的一個(gè)開源版本,于2014年9月發(fā)布第一個(gè)版本,2015年7月發(fā)布第一個(gè)正式版本。

kubernetes官網(wǎng)

kubernetes的本質(zhì)是一組服務(wù)器集群,它可以在集群的每個(gè)節(jié)點(diǎn)上運(yùn)行特定的程序,來對(duì)節(jié)點(diǎn)中的容器進(jìn)行管理。目的是實(shí)現(xiàn)資源管理的自動(dòng)化,主要提供了如下的主要功能:

  • 自我修復(fù):一旦某一個(gè)容器崩潰,能夠在1秒中左右迅速啟動(dòng)新的容器
  • 彈性伸縮:可以根據(jù)需要,自動(dòng)對(duì)集群中正在運(yùn)行的容器數(shù)量進(jìn)行調(diào)整
  • 服務(wù)發(fā)現(xiàn):服務(wù)可以通過自動(dòng)發(fā)現(xiàn)的形式找到它所依賴的服務(wù)
  • 負(fù)載均衡:如果一個(gè)服務(wù)起動(dòng)了多個(gè)容器,能夠自動(dòng)實(shí)現(xiàn)請(qǐng)求的負(fù)載均衡
  • 版本回退:如果發(fā)現(xiàn)新發(fā)布的程序版本有問題,可以立即回退到原來的版本
  • 存儲(chǔ)編排:可以根據(jù)容器自身的需求自動(dòng)創(chuàng)建存儲(chǔ)卷

在這里插入圖片描述

1.3 kubernetes組件

一個(gè)kubernetes集群主要是由控制節(jié)點(diǎn)(master,做管理)、工作節(jié)點(diǎn)(node) 構(gòu)成,每個(gè)節(jié)點(diǎn)上都會(huì)安裝不同的組件。

master:集群的控制平面,負(fù)責(zé)集群的決策 ( 集群管理者 )

ApiServer : 資源操作的唯一入口,接收用戶輸入的命令,提供認(rèn)證、授權(quán)、API注冊(cè)和發(fā)現(xiàn)等機(jī)制

Scheduler : 負(fù)責(zé)集群資源調(diào)度(計(jì)算),按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的node節(jié)點(diǎn)上

ControllerManager : 負(fù)責(zé)維護(hù)集群的狀態(tài),比如程序部署安排、故障檢測(cè)、自動(dòng)擴(kuò)展、滾動(dòng)更新等

Etcd :負(fù)責(zé)存儲(chǔ)集群中各種資源對(duì)象的信息(默認(rèn)使用etcd,也可以手動(dòng)改為mysql等)

node:集群的數(shù)據(jù)平面,負(fù)責(zé)為容器提供運(yùn)行環(huán)境 (真正干活 )

Kubelet : 負(fù)責(zé)維護(hù)容器的生命周期,即通過控制docker,來創(chuàng)建、更新、銷毀容器

KubeProxy : 負(fù)責(zé)提供集群內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡(訪問k8s里程序的入口,例如他可以提供訪問linux的入口)

Docker : 負(fù)責(zé)節(jié)點(diǎn)上容器的各種操作

在這里插入圖片描述

下面,以部署一個(gè)nginx服務(wù)來說明kubernetes系統(tǒng)各個(gè)組件調(diào)用關(guān)系:

  1. 首先要明確,一旦kubernetes環(huán)境啟動(dòng)之后,master和node都會(huì)將自身的信息存儲(chǔ)到etcd數(shù)據(jù)庫中

  2. 一個(gè)nginx服務(wù)的安裝請(qǐng)求會(huì)首先被發(fā)送到master節(jié)點(diǎn)的apiServer組件

  3. apiServer組件會(huì)調(diào)用scheduler組件來決定到底應(yīng)該把這個(gè)服務(wù)安裝到哪個(gè)node節(jié)點(diǎn)上

    在此時(shí),它會(huì)從etcd中讀取各個(gè)node節(jié)點(diǎn)的信息,然后按照一定的算法進(jìn)行選擇,并將結(jié)果告知apiServer

  4. apiServer調(diào)用controller-manager去調(diào)度Node節(jié)點(diǎn)安裝nginx服務(wù)

  5. kubelet接收到指令后,會(huì)通知docker,然后由docker來啟動(dòng)一個(gè)nginx的pod

    pod是kubernetes的最小操作單元,容器必須跑在pod中

  6. 至此,一個(gè)nginx服務(wù)就運(yùn)行了,如果需要訪問nginx,就需要通過kube-proxy來對(duì)pod產(chǎn)生訪問的代理

這樣,外界用戶就可以訪問集群中的nginx服務(wù)了

1.4 kubernetes概念

Master:集群控制節(jié)點(diǎn),每個(gè)集群需要至少一個(gè)master節(jié)點(diǎn)負(fù)責(zé)集群的管控

Node:工作負(fù)載節(jié)點(diǎn),由master分配容器到這些node工作節(jié)點(diǎn)上,然后node節(jié)點(diǎn)上的docker負(fù)責(zé)容器的運(yùn)行

Pod:kubernetes的最小控制單元,容器都是運(yùn)行在pod中的,一個(gè)pod中可以有1個(gè)或者多個(gè)容器

Controller:控制器,通過它來實(shí)現(xiàn)對(duì)pod的管理,比如啟動(dòng)pod、停止pod、伸縮pod的數(shù)量等等

Service:pod對(duì)外服務(wù)的統(tǒng)一入口,下面可以維護(hù)者同一類的多個(gè)pod

Label:標(biāo)簽,用于對(duì)pod進(jìn)行分類,同一類pod會(huì)擁有相同的標(biāo)簽

NameSpace:命名空間,用來隔離pod的運(yùn)行環(huán)境(默認(rèn)pod之間是可以相互訪問的,有了Namspace后,可以控制pod之間是否能訪問)

在這里插入圖片描述

二 kubernetes集群環(huán)境搭建

2.1 集群類型

Kubernetes集群大致分為兩類:一主多從和多主多從。
● 一主多從:一個(gè)Master節(jié)點(diǎn)和多臺(tái)Node節(jié)點(diǎn),搭建簡(jiǎn)單,但是有單機(jī)故障風(fēng)險(xiǎn),適合用于測(cè)試環(huán)境。
● 多主多從:多臺(tái)Master和多臺(tái)Node節(jié)點(diǎn),搭建麻煩,安全性高,適合用于生產(chǎn)環(huán)境。
在這里插入圖片描述

為了測(cè)試方便,本次搭建的是一主多從類型的集群。

2.1.1 安裝方式

kubernetes有多種部署方式,目前主流的方式有kubeadm、minikube、二進(jìn)制包。

● minikube:一個(gè)用于快速搭建單節(jié)點(diǎn)的kubernetes工具。
● kubeadm:一個(gè)用于快速搭建kubernetes集群的工具。
● 二進(jìn)制包:從官網(wǎng)上下載每個(gè)組件的二進(jìn)制包,依次去安裝,此方式對(duì)于理解kubernetes組件更加有效。

我們需要安裝kubernetes的集群環(huán)境,但是又不想過于麻煩,所以選擇kubeadm方式

2.1.2 主機(jī)規(guī)劃

角色IP地址操作系統(tǒng)配置
Master192.168.18.100CentOS7.5,基礎(chǔ)設(shè)施服務(wù)器2核CPU,2G內(nèi)存,50G硬盤
Node1192.168.18.101CentOS7.5,基礎(chǔ)設(shè)施服務(wù)器2核CPU,2G內(nèi)存,50G硬盤
Node2192.168.18.102CentOS7.5,基礎(chǔ)設(shè)施服務(wù)器2核CPU,2G內(nèi)存,50G硬盤

2.2 環(huán)境搭建

2.2.1 前言

本次環(huán)境搭建需要三臺(tái)CentOS服務(wù)器(一主二從),然后在每臺(tái)服務(wù)器中分別安裝Docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0)。

沒有特殊說明,就是三臺(tái)機(jī)器都需要執(zhí)行。

配置虛擬機(jī)IP與主機(jī)名

在這里插入圖片描述

配置ip
在這里插入圖片描述
在這里插入圖片描述
這里改為手動(dòng)設(shè)置ip
在這里插入圖片描述
具體的ip網(wǎng)斷是多少?需要查一下這里:
在這里插入圖片描述
選擇net模式,左下角就是你自己虛擬機(jī)的網(wǎng)斷(注意,vmware默認(rèn).2是網(wǎng)關(guān),所以ip不可以配成192.1681.109.2)
在這里插入圖片描述
所以回到ip配置這里繼續(xù)
在這里插入圖片描述

DNS地址使用阿里的地址即可

2.2.2 環(huán)境初始化

2.2.2.1 檢查操作系統(tǒng)的版本

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

cat /etc/redhat-release

在這里插入圖片描述

2.2.2.2 關(guān)閉防火墻和禁止防火墻開機(jī)啟動(dòng)

生產(chǎn)環(huán)境不能這么干,只打開使用的端口即可

關(guān)閉防火墻:

systemctl stop firewalld

禁止防火墻開機(jī)啟動(dòng):

systemctl disable firewalld

在這里插入圖片描述

2.2.2.3 設(shè)置主機(jī)名

設(shè)置主機(jī)名語法

hostnamectl set-hostname <hostname>

設(shè)置192.168.18.100的主機(jī)名:

hostnamectl set-hostname master

設(shè)置192.168.18.101的主機(jī)名

hostnamectl set-hostname node1

設(shè)置192.168.18.102的主機(jī)名

hostnamectl set-hostname node2

2.2.2.4 主機(jī)名解析

為了方便后面集群節(jié)點(diǎn)間的直接調(diào)用,需要配置一下主機(jī)名解析,企業(yè)中推薦使用內(nèi)部的DNS服務(wù)器里配置。

#vim /etc/hosts 
192.168.18.100 master
192.168.18.101 node1
192.168.18.102 node2

檢測(cè)配置是否成功:機(jī)器間直接ping主機(jī)名
在這里插入圖片描述

2.2.2.5 時(shí)間同步

kubernetes要求集群中的節(jié)點(diǎn)時(shí)間必須精確一致,所以在每個(gè)節(jié)點(diǎn)上添加時(shí)間同步(企業(yè)里建議配置自己的時(shí)間同步服務(wù)器):

直接執(zhí)行這倆命令:

systemctl start chronyd
systemctl enable chronyd

或者執(zhí)行下邊這倆命令也行:

yum install ntpdate -y
ntpdate time.windows.com

2.2.2.6 關(guān)閉selinux

selinux是linux下的安全服務(wù),如果不關(guān)閉,在安裝集群中會(huì)產(chǎn)生各種問題

查看selinux是否開啟

getenforce

永久關(guān)閉selinux,需要重啟

#方式一
sed -i 's/enforcing/disabled/' /etc/selinux/config
#方式二:編輯/etc/selinux/config文件,修改SELINUX的值為disable
SELINUX=disable

臨時(shí)關(guān)閉selinux,重啟之后,無效:

# 臨時(shí)關(guān)閉
setenforce 0

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

在這里插入圖片描述

永久關(guān)閉swap分區(qū),需要重啟

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

臨時(shí)關(guān)閉swap分區(qū),重啟之后,無效

swapoff -a

修改linux內(nèi)核參數(shù)
在這里插入圖片描述

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

在每個(gè)節(jié)點(diǎn)上將橋接的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

2.2.2.9 開啟ipvs

● 在kubernetes中service有兩種代理模型,一種是基于iptables,另一種是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手動(dòng)載入ipvs模塊。
● 在每個(gè)節(jié)點(diǎn)安裝ipset和ipvsadm:

yum -y install ipset ipvsadm
# 	或者
yum install ipset ipvsadmin -y 

在所有節(jié)點(diǎn)執(zhí)行如下腳本:添加需要的模塊寫入腳本文件(直接復(fù)制下邊的命令回車即刻 )

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_ipv4
EOF

授權(quán)、運(yùn)行、檢查是否加載:

chmod 755 /etc/sysconfig/modules/ipvs.modules 

執(zhí)行腳本

/bin/bash /etc/sysconfig/modules/ipvs.modules 

檢查是否加載:

lsmod | grep -e ipvs -e nf_conntrack_ipv4

2.2.2.10 重啟三臺(tái)機(jī)器

重啟三臺(tái)Linux機(jī)器:

reboot

2.2.3 每個(gè)節(jié)點(diǎn)安裝Docker、kubeadm、kubelet和kubectl

2.2.3.1 安裝Docker

  • 安裝docker
# 切換docker鏡像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 查看當(dāng)前鏡像源中支持的docker鏡像
yum list docker-ce --showduplicates

在這里插入圖片描述

# 安裝docker
# --setopt=obsoletes=0:不寫這個(gè)參數(shù),會(huì)自動(dòng)安裝更高版本
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
# yum -y install docker-ce-18.06.3.ce-3.el7

在這里插入圖片描述

啟動(dòng)docker

systemctl start docker
# 設(shè)置開機(jī)啟動(dòng)docker
systemctl enable docker 

查看docker版本

docker version
  • 設(shè)置Docker鏡像加速器(上邊已經(jīng)設(shè)置過了,這里不做也行)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"exec-opts": ["native.cgroupdriver=systemd"],	"registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com"],	"live-restore": true,"log-driver":"json-file","log-opts": {"max-size":"500m", "max-file":"3"},"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.2.3.2 添加阿里云的YUM軟件源

由于kubernetes的鏡像源在國外,非常慢,這里切換成國內(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

或者vim /etc/yum.repos.d/kubernetes.repo,然后輸入如下內(nèi)容

[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

2.2.3.3 安裝kubeadm、kubelet和kubectl

由于版本更新頻繁,這里指定版本號(hào)部署:

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

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

vim /etc/sysconfig/kubelet
# 修改
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

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

systemctl enable kubelet

8完

2.2.4 查看k8s所需鏡像

查看k8s所需鏡像:

kubeadm config images list

在這里插入圖片描述
下載鏡像:這里下載1.17.4
在這里插入圖片描述
復(fù)制完上邊的命令后直接回車
在這里插入圖片描述
使用for循環(huán)下載上邊的鏡像(復(fù)制完直接回車)
在這里插入圖片描述
查看下載下來的鏡像
在這里插入圖片描述

2.2.5 部署k8s的Master節(jié)點(diǎn)

部署k8s的Master節(jié)點(diǎn)(192.168.18.100):

情況一:
上邊已經(jīng)下載好了鏡像,可以直接使用下邊的命令初始化master即可
在這里插入圖片描述

情況二:
如果之前沒有下載好鏡像,可以使用下邊命令在線下載安裝master

# 由于默認(rèn)拉取鏡像地址k8s.gcr.io國內(nèi)無法訪問,這里需要指定阿里云鏡像倉庫地址
kubeadm init \--apiserver-advertise-address=192.168.18.100 \--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

在這里插入圖片描述
在這里插入圖片描述
根據(jù)提示消息,在Master節(jié)點(diǎn)上使用kubectl工具:

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

2.2.6 部署k8s的Node節(jié)點(diǎn)

master安裝后,控制臺(tái)有如下命令:復(fù)制該命令到各個(gè)node節(jié)點(diǎn)去執(zhí)行,把node節(jié)點(diǎn)加入到master集群里
在這里插入圖片描述

根據(jù)提示,在192.168.18.101和192.168.18.102上添加如下的命令:

# 把當(dāng)前node節(jié)點(diǎn)加入到集群里;注意,下邊的命令粘貼的是上邊master安裝后,控制臺(tái)打印出來的命令
kubeadm join 192.168.18.100:6443 --token jv039y.bh8yetcpo6zeqfyj \--discovery-token-ca-cert-hash sha256:3c81e535fd4f8ff1752617d7a2d56c3b23779cf9545e530828c0ff6b507e0e26

在這里插入圖片描述
查看集群里的節(jié)點(diǎn)信息
在這里插入圖片描述
可以看到,狀態(tài)是NotReady,即網(wǎng)絡(luò)還沒通,節(jié)點(diǎn)之間不能通信;

默認(rèn)的token有效期為24小時(shí),當(dāng)過期之后,該token就不能用了,這時(shí)可以使用如下的命令創(chuàng)建token:

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

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

根據(jù)提示,在Master節(jié)點(diǎn)上使用kubectl工具查看節(jié)點(diǎn)狀態(tài):

kubectl get nodes

在這里插入圖片描述
● kubernetes支持多種網(wǎng)絡(luò)插件,比如flannel、calico、canal等,任選一種即可,本次選擇flannel,如果網(wǎng)絡(luò)不行,可以使用本人提供的,當(dāng)然,你也可以安裝calico
● 在Master節(jié)點(diǎn)上獲取flannel配置文件(可能會(huì)失敗,如果失敗,請(qǐng)下載到本地,然后安裝):

在這里插入圖片描述

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

下載下來后,修改文件里的倉庫為國內(nèi)的倉庫地址
在這里插入圖片描述

使用配置文件啟動(dòng)flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查看部署CNI網(wǎng)絡(luò)插件進(jìn)度:

kubectl get pods -n kube-system

在這里插入圖片描述
再次在Master節(jié)點(diǎn)使用kubectl工具查看節(jié)點(diǎn)狀態(tài)

kubectl get nodes

在這里插入圖片描述
查看集群健康狀況:

kubectl get cs

在這里插入圖片描述

kubectl cluster-info

在這里插入圖片描述

2.3 服務(wù)部署

2.3.1 前言

在Kubernetes集群中部署一個(gè)Nginx程序,測(cè)試下集群是否正常工作。

2.3.2 步驟

部署Nginx:(在master操作即可)

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

暴露端口:

# NodePort:集群外的瀏覽器可以訪問
kubectl expose deployment nginx --port=80 --type=NodePort

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

# svc:service
kubectl get pods,svc

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

2.4 kubernetes中kubectl命令自動(dòng)補(bǔ)全

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo “source <(kubectl completion bash)” >> ~/.bashrc
 vim /root/.bashrc 
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)

二 kubernetes集群環(huán)境搭建

2.1 前置知識(shí)點(diǎn)

目前生產(chǎn)部署Kubernetes 集群主要有兩種方式:

kubeadm

Kubeadm 是一個(gè)K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群。

官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二進(jìn)制包

從github 下載發(fā)行版的二進(jìn)制包,手動(dòng)部署每個(gè)組件,組成Kubernetes 集群。

Kubeadm 降低部署門檻,但屏蔽了很多細(xì)節(jié),遇到問題很難排查。如果想更容易可控,推薦使用二進(jìn)制包部署Kubernetes 集群,雖然手動(dòng)部署麻煩點(diǎn),期間可以學(xué)習(xí)很多工作原理,也利于后期維護(hù)。

在這里插入圖片描述

2.2 kubeadm 部署方式介紹

kubeadm 是官方社區(qū)推出的一個(gè)用于快速部署kubernetes 集群的工具,這個(gè)工具能通過兩條指令完成一個(gè)kubernetes 集群的部署:

  • 創(chuàng)建一個(gè)Master 節(jié)點(diǎn)kubeadm init
  • 將Node 節(jié)點(diǎn)加入到當(dāng)前集群中$ kubeadm join <Master 節(jié)點(diǎn)的IP 和端口>

2.3 安裝要求

在開始之前,部署Kubernetes 集群機(jī)器需要滿足以下幾個(gè)條件:

  • 一臺(tái)或多臺(tái)機(jī)器,操作系統(tǒng)CentOS7.x-86_x64
  • 硬件配置:2GB 或更多RAM,2 個(gè)CPU 或更多CPU,硬盤30GB 或更多
  • 集群中所有機(jī)器之間網(wǎng)絡(luò)互通
  • 可以訪問外網(wǎng),需要拉取鏡像
  • 禁止swap 分區(qū)

2.4 最終目標(biāo)

  • 在所有節(jié)點(diǎn)上安裝Docker 和kubeadm
  • 部署Kubernetes Master
  • 部署容器網(wǎng)絡(luò)插件
  • 部署Kubernetes Node,將節(jié)點(diǎn)加入Kubernetes 集群中
  • 部署Dashboard Web 頁面,可視化查看Kubernetes 資源

2.5 準(zhǔn)備環(huán)境

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-tq1on6fU-1640144981804)(Kubenetes.assets/image-20210609000002940.png)]

角色IP地址組件
k8s-master01192.168.5.3docker,kubectl,kubeadm,kubelet
k8s-node01192.168.5.4docker,kubectl,kubeadm,kubelet
k8s-node02192.168.5.5docker,kubectl,kubeadm,kubelet

2.6 系統(tǒng)初始化

2.6.1 設(shè)置系統(tǒng)主機(jī)名以及 Host 文件的相互解析

hostnamectl set-hostname k8s-master01 && bash
hostnamectl set-hostname k8s-node01 && bash
hostnamectl set-hostname k8s-node02 && bash
cat <<EOF>> /etc/hosts
192.168.5.3     k8s-master01
192.168.5.4     k8s-node01
192.168.5.5     k8s-node02
EOF
scp /etc/hosts root@192.168.5.4:/etc/hosts 
scp /etc/hosts root@192.168.5.5:/etc/hosts 

2.6.2 安裝依賴文件(所有節(jié)點(diǎn)都要操作)

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

2.6.3 設(shè)置防火墻為 Iptables 并設(shè)置空規(guī)則(所有節(jié)點(diǎn)都要操作)

systemctl stop firewalld && systemctl disable firewalldyum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

2.6.4 關(guān)閉 SELINUX(所有節(jié)點(diǎn)都要操作)

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstabsetenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2.6.5 調(diào)整內(nèi)核參數(shù),對(duì)于 K8S(所有節(jié)點(diǎn)都要操作)

modprobe br_netfiltercat <<EOF> kubernetes.conf 
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空間,只有當(dāng)系統(tǒng) OOM 時(shí)才允許使用它
vm.overcommit_memory=1 # 不檢查物理內(nèi)存是否夠用
vm.panic_on_oom=0 # 開啟 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOFcp kubernetes.conf /etc/sysctl.d/kubernetes.confsysctl -p /etc/sysctl.d/kubernetes.conf

2.6.6 調(diào)整系統(tǒng)時(shí)區(qū)(所有節(jié)點(diǎn)都要操作)

# 設(shè)置系統(tǒng)時(shí)區(qū)為 中國/上海
timedatectl set-timezone Asia/Shanghai
# 將當(dāng)前的 UTC 時(shí)間寫入硬件時(shí)鐘
timedatectl set-local-rtc 0
# 重啟依賴于系統(tǒng)時(shí)間的服務(wù)
systemctl restart rsyslog
systemctl restart crond

2.6.7 設(shè)置 rsyslogd 和 systemd journald(所有節(jié)點(diǎn)都要操作)

# 持久化保存日志的目錄
mkdir /var/log/journal 
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盤
Storage=persistent# 壓縮歷史日志
Compress=yesSyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000# 最大占用空間 10G
SystemMaxUse=10G# 單日志文件最大 200M
SystemMaxFileSize=200M# 日志保存時(shí)間 2 周
MaxRetentionSec=2week# 不將日志轉(zhuǎn)發(fā)到 syslog
ForwardToSyslog=no
EOFsystemctl restart systemd-journald

2.6.8 kube-proxy開啟ipvs的前置條件(所有節(jié)點(diǎn)都要操作)

cat <<EOF> /etc/sysconfig/modules/ipvs.modules 
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOFchmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

2.6.9 安裝 Docker 軟件(所有節(jié)點(diǎn)都要操作)

yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-ce## 創(chuàng)建 /etc/docker 目錄
mkdir /etc/dockercat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# 重啟docker服務(wù)
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

上傳文件到/etc/yum.repos.d/ 目錄下,也可以 代替 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 命令

docker-ce.repo

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

2.6.10 安裝 Kubeadm (所有節(jié)點(diǎn)都要操作)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOFyum install -y kubelet kubeadm kubectl && systemctl enable kubelet

2.7 部署Kubernetes Master

2.7.1 初始化主節(jié)點(diǎn)(主節(jié)點(diǎn)操作)

kubeadm init --apiserver-advertise-address=192.168.5.3 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.21.1 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

2.7.2 加入主節(jié)點(diǎn)以及其余工作節(jié)點(diǎn)

kubeadm join 192.168.5.3:6443 --token h0uelc.l46qp29nxscke7f7 \--discovery-token-ca-cert-hash sha256:abc807778e24bff73362ceeb783cc7f6feec96f20b4fd707c3f8e8312294e28f 

2.7.3 部署網(wǎng)絡(luò)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

下邊是文件

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: psp.flannel.unprivilegedannotations:seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/defaultseccomp.security.alpha.kubernetes.io/defaultProfileName: docker/defaultapparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/defaultapparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:privileged: falsevolumes:- configMap- secret- emptyDir- hostPathallowedHostPaths:- pathPrefix: "/etc/cni/net.d"- pathPrefix: "/etc/kube-flannel"- pathPrefix: "/run/flannel"readOnlyRootFilesystem: false# Users and groupsrunAsUser:rule: RunAsAnysupplementalGroups:rule: RunAsAnyfsGroup:rule: RunAsAny# Privilege EscalationallowPrivilegeEscalation: falsedefaultAllowPrivilegeEscalation: false# CapabilitiesallowedCapabilities: ['NET_ADMIN', 'NET_RAW']defaultAddCapabilities: []requiredDropCapabilities: []# Host namespaceshostPID: falsehostIPC: falsehostNetwork: truehostPorts:- min: 0max: 65535# SELinuxseLinux:# SELinux is unused in CaaSPrule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
rules:
- apiGroups: ['extensions']resources: ['podsecuritypolicies']verbs: ['use']resourceNames: ['psp.flannel.unprivileged']
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-systemlabels:tier: nodeapp: flannel
data:cni-conf.json: |{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-dsnamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linuxhostNetwork: truepriorityClassName: system-node-criticaltolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: quay.io/coreos/flannel:v0.14.0command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.14.0command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg

2.8 測(cè)試kubernetes 集群

2.8.1 部署nginx 測(cè)試

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

三 資源管理

3.1 資源管理介紹

在kubernetes中,所有的內(nèi)容都抽象為資源,用戶需要通過操作資源來管理kubernetes。

kubernetes的本質(zhì)上就是一個(gè)集群系統(tǒng),用戶可以在集群中部署各種服務(wù),所謂的部署服務(wù),其實(shí)就是在kubernetes集群中運(yùn)行一個(gè)個(gè)的容器,并將指定的程序跑在容器中。

kubernetes的最小管理單元是pod而不是容器,所以只能將容器放在Pod中,而kubernetes一般也不會(huì)直接管理Pod,而是通過Pod控制器來管理Pod的。

Pod可以提供服務(wù)之后,就要考慮如何訪問Pod中服務(wù),kubernetes提供了Service資源實(shí)現(xiàn)這個(gè)功能。

當(dāng)然,如果Pod中程序的數(shù)據(jù)需要持久化,kubernetes還提供了各種存儲(chǔ)系統(tǒng)。

在這里插入圖片描述

學(xué)習(xí)kubernetes的核心,就是學(xué)習(xí)如何對(duì)集群上的Pod、Pod控制器、Service、存儲(chǔ)等各種資源進(jìn)行操作

3.2 YAML語言介紹

YAML是一個(gè)類似 XML、JSON 的標(biāo)記性語言。它強(qiáng)調(diào)以數(shù)據(jù)為中心,并不是以標(biāo)識(shí)語言為重點(diǎn)。因而YAML本身的定義比較簡(jiǎn)單,號(hào)稱"一種人性化的數(shù)據(jù)格式語言"。

xml:

<heima><age>15</age><address>Beijing</address>
</heima>

yml:

heima:age: 15address: Beijing

YAML的語法比較簡(jiǎn)單,主要有下面幾個(gè):

  • 大小寫敏感
  • 使用縮進(jìn)表示層級(jí)關(guān)系
  • 縮進(jìn)不允許使用tab,只允許空格( 低版本限制 )
  • 縮進(jìn)的空格數(shù)不重要,只要相同層級(jí)的元素左對(duì)齊即可
  • '#'表示注釋

YAML支持以下幾種數(shù)據(jù)類型:

  • 純量:單個(gè)的、不可再分的值
  • 對(duì)象:鍵值對(duì)的集合,又稱為映射(mapping)/ 哈希(hash) / 字典(dictionary)
  • 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
# 純量, 就是指的一個(gè)簡(jiǎn)單的值,字符串、布爾值、整數(shù)、浮點(diǎn)數(shù)、Null、時(shí)間、日期
# 1 布爾類型
c1: true (或者True)
# 2 整型
c2: 234
# 3 浮點(diǎn)型
c3: 3.14
# 4 null類型 
c4: ~  # 使用~表示null
# 5 日期類型
c5: 2018-02-17    # 日期必須使用ISO 8601格式,即yyyy-MM-dd
# 6 時(shí)間類型
c6: 2018-02-17T15:02:31+08:00  # 時(shí)間使用ISO 8601格式,時(shí)間和日期之間使用T連接,最后使用+代表時(shí)區(qū)
# 7 字符串類型
c7: heima     # 簡(jiǎn)單寫法,直接寫值 , 如果字符串中間有特殊字符,必須使用雙引號(hào)或者單引號(hào)包裹 
c8: line1line2     # 字符串過多的情況可以拆成多行,每一行會(huì)被轉(zhuǎn)化成一個(gè)空格
# 對(duì)象
# 形式一(推薦):
heima:age: 15address: Beijing
# 形式二(了解):
heima: {age: 15,address: Beijing}
# 數(shù)組
# 形式一(推薦):
address:- 順義- 昌平  
# 形式二(了解):
address: [順義,昌平]

小提示:

1 書寫yaml切記: 后面要加一個(gè)空格

2 如果需要將多段yaml配置放在一個(gè)文件中,中間要使用---分隔

3 下面是一個(gè)yaml轉(zhuǎn)json的網(wǎng)站,可以通過它驗(yàn)證yaml是否書寫正確

https://www.json2yaml.com/convert-yaml-to-json

3.3 資源管理方式

下邊是三種創(chuàng)建pod的方式

  • 命令式對(duì)象管理:直接使用命令去操作kubernetes資源

    kubectl run nginx-pod --image=nginx:1.17.1 --port=80

  • 命令式對(duì)象配置:通過命令配置和配置文件去操作kubernetes資源

    kubectl create/patch -f nginx-pod.yaml

  • 聲明式對(duì)象配置:通過apply命令和配置文件去操作kubernetes資源
    apply:創(chuàng)建和更新資源(pod有的話就更新,沒有就創(chuàng)建)
    kubectl apply -f nginx-pod.yaml

類型操作對(duì)象適用環(huán)境優(yōu)點(diǎn)缺點(diǎn)
命令式對(duì)象管理對(duì)象測(cè)試簡(jiǎn)單只能操作活動(dòng)對(duì)象,無法審計(jì)、跟蹤
命令式對(duì)象配置文件開發(fā)可以審計(jì)、跟蹤項(xiàng)目大時(shí),配置文件多,操作麻煩
聲明式對(duì)象配置目錄開發(fā)支持目錄操作意外情況下難以調(diào)試

3.3.1 命令式對(duì)象管理

kubectl命令

kubectl是kubernetes集群的命令行工具,通過它能夠?qū)罕旧磉M(jìn)行管理,并能夠在集群上進(jìn)行容器化應(yīng)用的安裝部署。kubectl命令的語法如下:

kubectl [command] [type] [name] [flags]

comand:指定要對(duì)資源執(zhí)行的操作,例如create、get、delete,可以通過kubectl --help命令查看所有命令

type:指定資源類型,比如deployment、pod、service

name:指定資源的名稱,名稱大小寫敏感

flags:指定額外的可選參數(shù)

# 查看所有pod
kubectl get pod # 查看某個(gè)pod
kubectl get pod pod_name# 查看某個(gè)pod,以yaml格式展示結(jié)果,yaml改為json就是以json格式顯示
kubectl get pod pod_name -o yaml

在這里插入圖片描述

操作(comand類型)

kubernetes允許對(duì)資源進(jìn)行多種操作,可以通過–help查看詳細(xì)的操作命令

kubectl --help

經(jīng)常使用的操作有下面這些:

命令分類命令翻譯命令作用
基本命令create創(chuàng)建創(chuàng)建一個(gè)資源
edit編輯編輯一個(gè)資源
get獲取獲取一個(gè)資源
patch更新更新一個(gè)資源
delete刪除刪除一個(gè)資源
explain解釋展示資源文檔
運(yùn)行和調(diào)試run運(yùn)行在集群中運(yùn)行一個(gè)指定的鏡像
expose暴露暴露資源為Service
describe描述顯示資源內(nèi)部信息
logs日志輸出容器在 pod 中的日志輸出容器在 pod 中的日志
attach纏繞進(jìn)入運(yùn)行中的容器進(jìn)入運(yùn)行中的容器
exec執(zhí)行容器中的一個(gè)命令執(zhí)行容器中的一個(gè)命令
cp復(fù)制在Pod內(nèi)外復(fù)制文件
rollout首次展示管理資源的發(fā)布
scale規(guī)模擴(kuò)(縮)容Pod的數(shù)量
autoscale自動(dòng)調(diào)整自動(dòng)調(diào)整Pod的數(shù)量
高級(jí)命令applyrc通過文件對(duì)資源進(jìn)行配置
label標(biāo)簽更新資源上的標(biāo)簽
其他命令cluster-info集群信息顯示集群信息
version版本顯示當(dāng)前Server和Client的版本

資源類型(type)

kubernetes中所有的內(nèi)容都抽象為資源,可以通過下面的命令進(jìn)行查看:

kubectl api-resources

經(jīng)常使用的資源有下面這些:

資源分類資源名稱縮寫資源作用
集群級(jí)別資源nodesno集群組成部分
namespacesns隔離Pod
pod資源podspo裝載容器
pod資源控制器replicationcontrollersrc控制pod資源
replicasetsrs控制pod資源
deploymentsdeploy控制pod資源
daemonsetsds控制pod資源
jobs控制pod資源
cronjobscj控制pod資源
horizontalpodautoscalershpa控制pod資源
statefulsetssts控制pod資源
服務(wù)發(fā)現(xiàn)資源servicessvc統(tǒng)一pod對(duì)外接口
ingressing統(tǒng)一pod對(duì)外接口
存儲(chǔ)資源volumeattachments存儲(chǔ)
persistentvolumespv存儲(chǔ)
persistentvolumeclaimspvc存儲(chǔ)
配置資源configmapscm配置
secrets配置

下面以一個(gè)namespace / pod的創(chuàng)建和刪除簡(jiǎn)單演示下命令的使用:

# 創(chuàng)建一個(gè)namespace  名稱叫dev  namespace可以簡(jiǎn)寫為ns
[root@master ~]# kubectl create namespace dev
namespace/dev created# 獲取namespace
[root@master ~]# kubectl get ns  除了dev,其他是k8s集群自帶的
NAME              STATUS   AGE
default           Active   21h
dev               Active   21s
kube-node-lease   Active   21h
kube-public       Active   21h
kube-system       Active   21h# 在此namespace下創(chuàng)建并運(yùn)行一個(gè)nginx的Pod
[root@master ~]# kubectl run pod --image=nginx:latest -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created# 查看新創(chuàng)建的pod,默認(rèn)查詢default的namespace下的pod
[root@master ~]# kubectl get pod -n dev
NAME  READY   STATUS    RESTARTS   AGE
pod   1/1     Running   0          21s# 刪除指定ns下的的指定pod
[root@master ~]# kubectl delete pods pod-864f9875b9-pcw7x -n dev
pod "pod" deleted# 刪除指定的namespace
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted

3.3.2 命令式對(duì)象配置

命令式對(duì)象配置就是使用命令配合配置文件一起來操作kubernetes資源。

1) 創(chuàng)建一個(gè)nginxpod.yaml,內(nèi)容如下:

#創(chuàng)建名字是dev的namespace
apiVersion: v1
kind: Namespace
metadata:name: dev#yml文件里,要寫兩個(gè)名字一樣的配置的話,需要使用---做分割
---#在dev下創(chuàng)建一個(gè)pod,pod名字是nginxpod,鏡像以及鏡像版本是nginx:1.17.1
apiVersion: v1
kind: Pod
metadata:name: nginxpodnamespace: dev
spec:containers:- name: nginx-containersimage: nginx:1.17.1

2)執(zhí)行create命令,創(chuàng)建資源:

[root@master ~]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created

此時(shí)發(fā)現(xiàn)創(chuàng)建了兩個(gè)資源對(duì)象,分別是namespace和pod

查看名字是dev的namespace

kubectl get ns dev

查看dev下的pod

#pod可以寫成pods
kubectl get pod -n dev

在這里插入圖片描述

3)執(zhí)行g(shù)et命令,查看資源:

[root@master ~]#  kubectl get -f nginxpod.yaml
NAME            STATUS   AGE
namespace/dev   Active   18sNAME            READY   STATUS    RESTARTS   AGE
pod/nginxpod    1/1     Running   0          17s

這樣就顯示了兩個(gè)資源對(duì)象的信息

4)執(zhí)行delete命令,刪除資源:

[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted

此時(shí)發(fā)現(xiàn)兩個(gè)資源對(duì)象被刪除了

總結(jié):命令式對(duì)象配置的方式操作資源,可以簡(jiǎn)單的認(rèn)為:命令  +  yaml配置文件(里面是命令需要的各種參數(shù))

3.3.3 聲明式對(duì)象配置

聲明式對(duì)象配置跟命令式對(duì)象配置很相似,但是它只有一個(gè)命令apply。

# 首先執(zhí)行一次kubectl apply -f yaml文件,發(fā)現(xiàn)創(chuàng)建了資源,此處使用的nginxpod.yaml文件還是上邊創(chuàng)建的那個(gè)文件
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created# 再次執(zhí)行一次kubectl apply -f yaml文件,發(fā)現(xiàn)說資源沒有變動(dòng)
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged
總結(jié):其實(shí)聲明式對(duì)象配置就是使用apply描述一個(gè)資源最終的狀態(tài)(在yaml中定義狀態(tài))使用apply操作資源:如果資源不存在,就創(chuàng)建,相當(dāng)于 kubectl create如果資源已存在,就更新,相當(dāng)于 kubectl patch

擴(kuò)展:kubectl可以在node節(jié)點(diǎn)上運(yùn)行嗎 ?

kubectl的運(yùn)行是需要進(jìn)行配置的,它的配置文件是在master節(jié)點(diǎn)下的$HOME/.kube,如果想要在node節(jié)點(diǎn)運(yùn)行此命令,需要將master上的.kube文件復(fù)制到node節(jié)點(diǎn)上,即在master節(jié)點(diǎn)上執(zhí)行下面操作:

scp  -r  HOME/.kube   node1: HOME/

使用推薦: 三種方式應(yīng)該怎么用 ?

創(chuàng)建/更新資源 使用聲明式對(duì)象配置 kubectl apply -f XXX.yaml

刪除資源 使用命令式對(duì)象配置 kubectl delete -f XXX.yaml

查詢資源 使用命令式對(duì)象管理 kubectl get(describe) 資源名稱

Kubernetes實(shí)戰(zhàn)

http://www.risenshineclean.com/news/37769.html

相關(guān)文章:

  • 合肥知名網(wǎng)站制作新聞?lì)^條最新消息今天
  • 桂林網(wǎng)站建設(shè)凡森網(wǎng)絡(luò)網(wǎng)絡(luò)推廣用什么軟件好
  • wordpress 主題 修改鄭州seo哪家好
  • 寧波網(wǎng)絡(luò)推廣制作seo是哪里
  • 沈陽網(wǎng)站seo排名優(yōu)化愛網(wǎng)站關(guān)鍵詞查詢工具
  • 網(wǎng)站模版建站免費(fèi)引流人脈推廣軟件
  • 網(wǎng)站被降權(quán)的原因怎么知道網(wǎng)站有沒有被收錄
  • 做網(wǎng)站業(yè)務(wù)員怎么樣烘焙甜點(diǎn)培訓(xùn)學(xué)校
  • 電商視覺設(shè)計(jì)網(wǎng)站批量?jī)?yōu)化網(wǎng)站軟件
  • 外國做營銷方案的網(wǎng)站360建站和凡科哪個(gè)好
  • 建設(shè)銀行北京東四支行網(wǎng)站愛站網(wǎng)關(guān)鍵詞排名
  • 網(wǎng)站建設(shè)下什么科目武漢seo搜索引擎優(yōu)化
  • 慈溪做無痛同濟(jì) 網(wǎng)站北京最新疫情情況
  • 寧夏網(wǎng)站設(shè)計(jì)聯(lián)系電話推廣公司屬于什么公司
  • 合肥做網(wǎng)站多少錢資源網(wǎng)
  • wordpress sozo西安關(guān)鍵詞seo公司
  • 做網(wǎng)站銷售的技巧關(guān)鍵詞排名優(yōu)化教程
  • 電子商務(wù)網(wǎng)站開發(fā)模塊流程圖網(wǎng)站建設(shè)優(yōu)化哪家公司好
  • 做技術(shù)分享網(wǎng)站有哪些手機(jī)軟文廣告300字
  • 建甌做網(wǎng)站的公司實(shí)時(shí)軍事熱點(diǎn)
  • 網(wǎng)站內(nèi)容設(shè)計(jì)要求網(wǎng)站seo的優(yōu)化怎么做
  • 如何創(chuàng)建自己的博客網(wǎng)站google store
  • 青島網(wǎng)站專業(yè)制作重慶關(guān)鍵詞排名首頁
  • 鄭州市人民政府網(wǎng)站網(wǎng)站seo方案案例
  • 怎么做58同城網(wǎng)站免費(fèi)建站哪個(gè)最好
  • 網(wǎng)站策劃做營銷推廣廣告營銷
  • 沈陽網(wǎng)站制作找網(wǎng)勢(shì)科技國際軍事新聞
  • wordpress加個(gè)留言板谷歌seo排名技巧
  • 學(xué)校響應(yīng)式網(wǎng)站模板網(wǎng)絡(luò)推廣有哪些途徑
  • 網(wǎng)站列表頁內(nèi)容優(yōu)化關(guān)鍵詞哪家好