溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Kubernetes知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-11-18 11:17:25 來(lái)源:億速云 閱讀:156 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“Kubernetes知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Kubernetes知識(shí)點(diǎn)有哪些”吧!


k8s對(duì)象組件

Kubernetes知識(shí)點(diǎn)有哪些

Node工作節(jié)點(diǎn)
  • 負(fù)責(zé)應(yīng)用運(yùn)行(生產(chǎn)環(huán)境至少需要三個(gè)工作節(jié)點(diǎn))

  • 單Node上可工作數(shù)個(gè)Pod

  • 運(yùn)行三項(xiàng)關(guān)鍵服務(wù)

    • Kubelet:節(jié)點(diǎn)上的集群客戶端,負(fù)責(zé)節(jié)點(diǎn)管理及對(duì)master通信的代理

    • Kube Proxy:維護(hù)網(wǎng)絡(luò)以支持Service服務(wù)層

    • Container Runtime:容器運(yùn)行時(shí)交互

Master管理節(jié)點(diǎn)
  • 負(fù)責(zé)集群調(diào)度

  • 運(yùn)行關(guān)鍵服務(wù)

    • Kube API Server:提供Kube Api服務(wù)

    • Etcd:集群內(nèi)部一致性、可用性數(shù)據(jù)存儲(chǔ)

    • Kube Scheduler:調(diào)度Pod到合適Pod上運(yùn)行

    • Kube Controller Manager

    • Kube DNS

ReplicaSet
  • 工作在master節(jié)點(diǎn)上,下一代的Replication Controller

  • 主要被Deployments用作pod的管理調(diào)度

Pod容器組
  • 在Node上創(chuàng)建,非持久化

  • 包含一組相互間可localhost通信、關(guān)系緊密的容器(共享存儲(chǔ)卷、分配的cluster-ip、運(yùn)行信息)

  • 容器應(yīng)用的基本管理單元,可接受EndPoint請(qǐng)求

Deployment
  • 部署pod容器組,并監(jiān)控管理

  • master node上Controller Manager的一部分

Service服務(wù)
  • 一組后端Pods的抽象并提供穩(wěn)定的服務(wù)入口,實(shí)現(xiàn)集群內(nèi)部服務(wù)發(fā)現(xiàn)+負(fù)載均衡,同時(shí)也可對(duì)外暴露服務(wù)

  • 會(huì)分配到一個(gè)cluster-ip(是個(gè)VirtualIP,ping不通)

Service對(duì)象類型

  • ClusterIP:默認(rèn)方式,服務(wù)僅開(kāi)放到集群內(nèi)網(wǎng)IP(通過(guò)kube-proxy調(diào)用iptables創(chuàng)建規(guī)則將流量轉(zhuǎn)發(fā)到pod中,直接ping不通,因?yàn)椴淮嬖诮壎ǖ膶?shí)際網(wǎng)絡(luò)設(shè)備)

  • NodePort:在集群所有woker node靜態(tài)端口NAT映射到ClusterIP服務(wù)(可對(duì)外暴露服務(wù),端口范圍30000~32767)

  • LoadBalancer:在支持的云廠商上自動(dòng)創(chuàng)建L4 LBS節(jié)點(diǎn)并路由到NodePort服務(wù)(可對(duì)外暴露服務(wù))

  • ExternalName:基于CNAME機(jī)制使用字符串來(lái)開(kāi)放服務(wù)

端口類別:

  • TargetPort:Pod開(kāi)放的端口

  • Port:Service開(kāi)放的虛擬服務(wù)端口,其對(duì)接的EndPoints為下屬Pod的TargetPort

  • NodePort:service對(duì)外的公網(wǎng)的端口

從簡(jiǎn)單到復(fù)雜可以分成三類

  • 無(wú)狀態(tài)服務(wù):RS維護(hù)Pod,Service開(kāi)放接口

  • 普通有狀態(tài)服務(wù):通過(guò)Volume和Persistent Volume實(shí)現(xiàn)狀態(tài)保存

  • 有狀態(tài)集群服務(wù)

    • 基于PV/PVC獲得穩(wěn)定存儲(chǔ)

    • 基于Headless Service獲得穩(wěn)定網(wǎng)絡(luò)身份

    • 序號(hào)命名規(guī)則

    • Init Container:做初始化工作的容器(可多個(gè),順序執(zhí)行完后啟動(dòng)主容器)

    • Stateful Set

StatefullSet
  • 用于管理部署有狀態(tài)應(yīng)用

DaemonSet
  • 確保選定節(jié)點(diǎn)上始終有指定pod運(yùn)行

Ingress
  • 作為公網(wǎng)訪問(wèn)集群后端服務(wù)的入口,是Service Nodeport等之外更高級(jí)的服務(wù)暴露模型

  • 功能包括:集群外部的L7負(fù)載均衡+服務(wù)發(fā)現(xiàn)、反向代理,SSL截?cái)?,虛擬主機(jī)頭訪問(wèn)

  • 僅能在標(biāo)準(zhǔn)80/443口上暴露服務(wù),可配置http訪問(wèn)規(guī)則,包括:host、path

  • 駐留在control plane節(jié)點(diǎn)上,不占用work node的主機(jī)端口資源

IngressController
  • 持續(xù)請(qǐng)求kubernetes API,實(shí)時(shí)感知后端 service、pod變化(traifik無(wú)需這步,其直接和K8S交互)

  • 結(jié)合Ingress規(guī)則刷新負(fù)載均衡器的配置,實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)

Volume

基于插件形式實(shí)現(xiàn),擴(kuò)展性強(qiáng)

  • Volume:不能單獨(dú)創(chuàng)建,非獨(dú)立資源對(duì)象

    • Block Storage

    • Distributed File System

    • EmptyDir:空目錄,限于Pod生命周期但超越容器(可指定磁盤或內(nèi)存,可設(shè)定存儲(chǔ)上限,類似于docker volume內(nèi)部聲明)

    • HostPath:掛載宿主機(jī)已有的目錄,獨(dú)立于Pod存在(類似于docker volume外部聲明)

    • 單節(jié)點(diǎn)存儲(chǔ),基于Pod所在節(jié)點(diǎn)的本地目錄,常用于臨時(shí)數(shù)據(jù)存儲(chǔ)或Pod內(nèi)容器數(shù)據(jù)共享

    • 跨節(jié)點(diǎn)存儲(chǔ)storage provider

  • Persistent Volume:可單獨(dú)創(chuàng)建,獨(dú)立資源對(duì)象

    • 靜態(tài)創(chuàng)建:手工創(chuàng)建PV池供PVC綁定

    • 動(dòng)態(tài)創(chuàng)建:基于Storage Class,存儲(chǔ)系統(tǒng)根據(jù)PVC要求自動(dòng)創(chuàng)建

    • 存儲(chǔ)驅(qū)動(dòng):可以使用主流的CephRBD或GlusterFS分布式存儲(chǔ)方案,亦可使用方便簡(jiǎn)單的NFS(可以直接使用阿里云的NAS存儲(chǔ)服務(wù),支持NFS協(xié)議)方案

    • Retain:保留現(xiàn)場(chǎng),K8S什么也不做

    • Delete:K8S刪除PV及里面的數(shù)據(jù)

    • Recycle:K8S刪除PV里的數(shù)據(jù),PV再次Available

    • 通過(guò)Persistent Volume Claim來(lái)綁定卷和Pod,PV由Available狀態(tài)轉(zhuǎn)為Bound狀態(tài)

    • PV釋放后轉(zhuǎn)為Released狀態(tài),并進(jìn)行相應(yīng)回收策略

    • 創(chuàng)建形式

Minikube - 輕量級(jí)K8S架設(shè)方案

docker準(zhǔn)備
  • Docker Daemon

  • Docker Machine

安裝
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/

以下內(nèi)容寫入/init_minikube.sh并賦予可執(zhí)行權(quán)限

#!/bin/bash
export MINIKUBE_WANTUPDATENOTIFICATION=false
export MINIKUBE_WANTREPORTERRORPROMPT=false
export MINIKUBE_HOME=$HOME
export CHANGE_MINIKUBE_NONE_USER=true
export KUBECONFIG=$HOME/.kube/config
mkdir -p $HOME/.kube && touch $HOME/.kube/config

minikube start --vm-driver=none #將k8s集群通過(guò)none驅(qū)動(dòng)模式直接裝入宿主機(jī)
使用
sudo su - #none驅(qū)動(dòng)模式安裝minkube要求使用root賬號(hào)去管理操作
/init_minikube.sh

minikube dashboard --url #默認(rèn)在30000端口開(kāi)放k8s管理界面
minikube service frontend --url #指定服務(wù)的地址

#插件管理
minikube addons list
minikube addons enable 插件名
安裝排錯(cuò)
  • minikube logs檢查錯(cuò)誤日志

  • 留意gcr.io/google_containers/pause-amd64等鏡像是否成功下載

K8S集群管理

#管理命令(資源類型:nodes、pods、deployments、events、service、ing、all)
kubectl version
kubectl cluster-info #顯示集群信息
kubectl get 資源類型 [-l label鍵=label值] [-n 名字空間 / --all-namespaces] #羅列工作節(jié)點(diǎn)
kubectl config view #查看配置
kubectl describe 資源類型 #資源詳情
kubectl logs 資源名 #容器打印日志
kubectl label 資源類型 資源名 label鍵=label值 #打標(biāo)簽
#常用命令
kubectl get pod -o wide/yaml #檢查pod所在節(jié)點(diǎn)
kubectl get services 服務(wù)名 -o yaml #檢查服務(wù)詳情
kubectl delete pod --grace-period=0 --force pod名 #立即強(qiáng)制刪除pod

#容器執(zhí)行命令
kubectl exec -ti Pod名 [-c 容器名] -- 命令
kubectl exec Pod名 [-c 容器名] -- 命令

#configmap管理
kubectl create configmap 配置名 --from-file=配置文件路徑
kubectl get configmap 配置名 -o yaml

#創(chuàng)建deployment部署一個(gè)應(yīng)用到Pod
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email> #安裝registry憑據(jù)
方法1:kubectl run 部署名 --image=鏡像地址 --port=8080 --replicas=副本數(shù) --labels="key=value"
方法2:kubectl create|apply -f deployment.yaml
kubectl get deployments
kubectl get pods

#更新應(yīng)用
kubectl set image deployments/部署名 部署名=鏡像地址
kubectl rollout status deployments/部署名 #查看更新?tīng)顟B(tài)

#回滾應(yīng)用
kubectl rollout undo deployments/部署名

#應(yīng)用伸縮
kubectl scale deployments/部署名 --replicas=副本數(shù)

#開(kāi)放pod服務(wù)為service
kubectl expose deployment/部署名 --name=服務(wù)名 --type=NodePort|LoadBalancer--port 端口號(hào)
kubectl get services #可查看服務(wù)開(kāi)放地址

#下線服務(wù)
kubectl delete service -l label鍵=label值
kubectl delete deployment -l label鍵=label值

#禁止非worker節(jié)點(diǎn)調(diào)度運(yùn)行POD
kubectl taint node 節(jié)點(diǎn)名 node-role.kubernetes.io/節(jié)點(diǎn)名="":NoSchedule

健康檢查

  • 進(jìn)程級(jí)別檢查:檢查Docker Daemon服務(wù)時(shí)候活躍

  • 應(yīng)用級(jí)別檢查

    • HTTP:狀態(tài)碼200 and 399為健康

    • Container Exec:執(zhí)行容器命令,退出碼為0則健康

    • TCP Socket:嘗試套接字連接到容器內(nèi)


Rancher

  • V1版本支持K8S、Mesos、Swarm,V2轉(zhuǎn)而全力支持唯一K8S

  • Catalog:rancher構(gòu)建的應(yīng)用市場(chǎng)

  • Cattle:rancher自身使用的編排調(diào)度框架

安裝

防火墻開(kāi)放端口

  • SSH:22/tcp

  • RancherServer:8443/tcp、8080/tcp

  • K8S :6443(tcp ApiServer)、10250(tcp KubeletApi)、10251(tcp Schedule)、10252(tcp Control)、10255(tcp Control)、10256(tcp Kubeproxy)、30000/32767(tcp NodePort)

  • VXLAN:4789/udp

  • IPSec:500/udp、4500/udp

  • Etcd:2379/tcp、2380/tcp

  • Canal:80/tcp、443/tcp

  • Flannel:8285/udp、8472/udp、2375/udp

開(kāi)啟IPV4路由轉(zhuǎn)發(fā)(CentOS 7.4+不必此操作)

#/etc/sysctl.conf追加一行
net.ipv4.ip_forward = 1

Docker準(zhǔn)備

  • RancherServer及集群節(jié)點(diǎn)上支持最高Docker版本v17.03-ce

  • sudo yum install -y --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos

HTTPS證書準(zhǔn)備

docker run -it --rm -p 443:443 -p 80:80 --name certbot \
            -v "/etc/letsencrypt:/etc/letsencrypt" \
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
            certbot/certbot certonly -n -v --standalone --agree-tos --email=admin@rancher.example.com -d rancher.example.com

cd /etc/letsencrypt
sudo ln -s live/rancher.example.com/fullchain.pem cert.pem
sudo ln -s live/rancher.example.com/privkey.pem key.pem

節(jié)點(diǎn)機(jī)調(diào)整

  • 自定義方式創(chuàng)建RKE集群對(duì)節(jié)點(diǎn)hostname有要求

# hostname要求符合如下正則 `'[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*'`
sudo hostnamectl set-hostname k8s-worker-1.cluster-a
sudo hostnamectl status
  • 為了加速節(jié)點(diǎn)及拉取私有鏡像庫(kù)的速率, 需要在節(jié)點(diǎn)機(jī)上增加一條host解析鏡像庫(kù)的局域網(wǎng)ip

Compose編排服務(wù)

version: '2' 

services:

  Rancher:
    image: rancher/server:preview
    container_name: rancher
    hostname: rancher
    restart: always
    ports:
      - '8443:8443'
      - '8080:8080'
    volumes:
        - /srv/rancher:/var/lib/rancher
        - /etc/letsencrypt:/etc/rancher/ssl
    entrypoint: rancher --http-listen-port=8080 --https-listen-port=8443
    command: --acme-domain rancher.example.com

啟動(dòng)服務(wù)

docker pull rancher/server:preview
docker-compose up -d Rancher
docker logs -f rancher #跟進(jìn)rancher初始化狀態(tài)
配置
  • 默認(rèn)賬號(hào)密碼admin:admin

  • 登錄系統(tǒng)并修改密碼

創(chuàng)建集群
  • custom模式、canal網(wǎng)絡(luò)創(chuàng)建集群

  • control、etcd節(jié)點(diǎn)要求至少1核2G內(nèi)存(集群節(jié)點(diǎn)掉線可排查機(jī)器負(fù)載情況)

  • 配置Registries私有鏡像倉(cāng)庫(kù)

調(diào)試
####
#RancherServer調(diào)試
docker logs -f rancher

#K8sNode調(diào)試
journalctl -xf -u docker
docker logs kubelet

感謝各位的閱讀,以上就是“Kubernetes知識(shí)點(diǎn)有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Kubernetes知識(shí)點(diǎn)有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI