項目11-Kubernetes 搭建與運維_第1頁
項目11-Kubernetes 搭建與運維_第2頁
項目11-Kubernetes 搭建與運維_第3頁
項目11-Kubernetes 搭建與運維_第4頁
項目11-Kubernetes 搭建與運維_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Kubernetes搭建與運維思政課堂Kubernetes(簡稱k8s)是Google在2014年6月開源的一個容器集群管理系統,使用Go語言開發,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效,Kubernetes提供了資源調度、部署管理、服務發現、擴容縮容、監控,維護等一整套功能,并且使用kubernetes集群實現精細化管理。

精細化理念是一種以最大限度地減少管理所占用的資源和降低管理成本為主要目標的管理方式。在我國,老子最早提出類似的思想,他說:“天下大事必作于細。”中國宋代教育家朱熹也曾說:“言治骨角者,既切之而復蹉之;治玉石者,既琢之而復磨之。治之已5精,而益求其精也。”可見精細思想在中國歷史悠久。當今所實踐的精細化,它是一種意識、一種理念、一種認真的態度,一種負責任的行為,一種敬業精神。其目的是提高大家對看似簡單、隨意的事情的重視度,把工作精心作細。

“精”是目標,追求最好;“準”是目標與決策準確無誤;“細”是執行細化,重視細節;“嚴”是嚴格控制偏差,一絲不茍。精、準、細、嚴是精細化管理的核心思想,它以科學管理為基礎,以精細操作為特征,通過充分運用企業的各種資源,強化操作,提高組織的執行力,從而提高企業的整體效益。

精細管理是整個企業運行的核心工程。企業要做強,需要有效運用文化精華,技術精華,智慧精華等來指導,促進企業的發展。它的精髓就在于:企業需要把握好產品質量的特性、處理好質量與零缺陷之間的關系,建立確保質量形成的體系,為企業形成核心競爭力和創建品牌奠定基礎。它的精密也在于:企業內部凡有分工協作和前后工序關系的部門與環節其配合與協作需要精密。項目描述

最近云原生非常火爆,很多公司都往云原生靠近,阿福所在的公司也不例外,阿福剛學習完容器技術,他覺得如果是只有一個Docker技術,很難保證業務的可靠性,非常容易發生單點故障。一旦發生,這個責任是他無法承擔的。正好阿福發現一個最近非常火爆的技術,Kubernetes,簡稱K8S。一句話總結,Docker的所有痛點都在K8S上解決了。阿福準備繼續走下去

本任務主要是了解Kubernetes

容器云平臺的架構,了解Kubernetes

容器云平臺的基本原理,掌握使用Kubeadm

部署Kubernetes

集群。而且了解K8S各種資源對象,并對相應資源做基礎運維,如增刪改查。問題引導Kubernetes需要依賴Docker嗎?Kubernetes的最小單元也是容器嗎?Kubernetes的架構有哪兩個角色?Kubernetes各節點的分別部署了什么?知識學習1、kubrenetes簡介

kubernetes,簡稱K8s,是用8代替名字中間的8個字符“ubernete”而成的縮寫。是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。2、kubernetes與docker的關系

Docker是用于構建、分發和運行Docker容器的平臺和工具;而Kubernetes不包含用于創建或管理容器鏡像的功能,并且它本身并不運行容器。因此兩者的主要區別在于Docker在單個節點上運行,而Kubernetes設計為在集群上運行。

Kubernetes和Docker另一個主要區別在于Docker可以在沒有Kubernetes的情況下使用,而Kubernetes需要容器運行時才能進行編排。

以上是對Kubernetes和Docker區別的簡單介紹,兩者各有各的優勢,解決的問題也有所不同,我們可根據項目實際需要進行選擇。知識學習3.Kubernetes資源介紹

replicaset:代用戶創建指定的pod數,并確保pod一直處于用戶期望的狀態,如果少了就添加pod,多了就干掉多的pod,支持自動擴縮容。Deployment:控制replicaset進行控制pod,支持滾動更新及回滾等操作,管理無狀態應用最后的工具。DaenmonSet:用于確保集群的每個節點只運行一個特定的pod(新增節點會自動添加該pod),通常用來實現系統及的托管任務。Job:按照用戶指定的pod數量啟動pod,當pod任務完成后pod掛了不會重啟(任務未完成會重啟),只是完成一次性任務的服務。Cronjob:在job基礎上周期性完成任務。(只能管控無狀態群體)StatefulSet:管理有狀態應用,每個應用單獨管理、擁有獨有標識、獨有數據記憶,一旦節點故障,添加的新節點會重新初始化操作。例如rediscluster節點(少用)IngressController:獨立運行一個或一組pod資源,通常就是一個應用程序,該程序擁有7層代理能力。可選擇Haproxy、nginx、envoy、traefik(適合微服務)Ingress資源:可以直接通過編輯注入到ingressController中并保存及重載配置文件。Helm:k8s官方提供類似yum項目實施本實驗不在演示如何創建虛擬機,請準備好一臺虛擬機,網絡自行規劃好。下面先介紹一下Kubernetes的架構。Kubernetes(簡稱K8S)是開源的容器集群管理系統,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。它既是一款容器編排工具,也是全新的基于容器技術的分布式架構領先方案。在Docker技術的基礎上,為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等功能,提高了大規模容器集群管理的便捷性。K8S集群中有管理節點與工作節點兩種類型,部署架構如下圖所示。管理節點主要負責K8S集群管理,集群中各節點間的信息交互、任務調度,還負責容器、Pod、NameSpaces、持久卷(PersistentVolume,PV)等生命周期的管理。工作節點主要為容器和Pod提供計算資源,Pod及容器全部運行在工作節點上,工作節點通過Kubelet服務與管理節點通信以管理容器的生命周期,并與集群其他節點進行通信,如下圖11-1所示。一、Kubernetes架構與搭建項目實施圖11-1k8s架構圖項目實施1、節點規劃IP主機名節點27K8s-mastermaster節點29K8s-nodenode節點2、基礎環境配置(1)配置本地yum源所有節點將K8s.tar.gz上傳至/root/目錄并解壓[root@k8s-master~]#tar-zxvf

K8s.tar.gz所有節點配置本地yum源[root@k8s-master~]#rm-rf/etc/yum.repos.d/*[root@k8s-master~]#vi/etc/yum.repos.d/local.repo[k8s]name=k8sbaseurl=file:///root/Kubernetesgpgcheck=0項目實施(2)所有修改主機名,修改hosts文件[root@k8s-master~]#hostnamectl

set-hostname

k8s-master[root@k8s-node~]#hostnamectl

set-hostname

k8s-node[root@k8s-master~]#

vi/etc/hosts

localhost

localhost.localdomain

localhost4localhost4.localdomain4::1localhost

localhost.localdomain

localhost6localhost6.localdomain627k8s-master29k8s-node(3)配置防火墻、selinux、iptables規則所有節點配置防火墻、selinux、iptables規則[root@k8s-master~]#systemctl

stop

firewalld&&systemctl

disable

firewalld[root@k8s-master~]#iptables-F[root@k8s-master~]#iptables-X[root@k8s-master~]#iptables-Z[root@k8s-master~]#iptables-save[root@k8s-master~]#sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config[root@k8s-master~]#setenforce0項目實施(4)關閉Swap交換分區所有節點關閉Swap交換分區[root@k8s-master~]#swapoff-a#臨時關閉[root@k8s-master~]#sed-i"s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g"/etc/fstab#永久關閉(5)配置時間同步服務所有節點安裝chrony[root@k8s-master~]#

yum

install-y

chronyK8s-master節點修改配置文件/etc/chrony.conf,將默認的時間同步服務器注釋,自己向自己同步,允許任何節點向自己時間同步。[root@k8s-master~]#

sed-i's/^server/#&/'/etc/chrony.conf[root@k8s-master~]#

cat>>/etc/chrony.conf<<EOFlocal

stratum10server

k8s-master

iburstallow

allEOF項目實施重啟服務,并且設為開機自啟[root@k8s-master~]#

systemctl

restart

chronyd&&systemctl

enable

chronydK8s-node節點修改/etc/chrony.conf文件,向k8s-master節點同步時間,啟動服務,并開機自啟[root@k8s-master~]#

sed-i's/^server/#&/'/etc/chrony.conf[root@k8s-master~]#echoserverk8s-masteriburst>>/etc/chrony.conf[root@k8s-master~]#systemctlrestartchronyd&&systemctlenablechronyd所有節點檢查時間是否同步成功[root@k8s-master~]#

chronyc

sources210Number

of

sources=1MS

Name/IP

address

Stratum

Poll

Reach

LastRx

Last

sample===============================================================================^*k8s-master106377280-12ns[-4299ns]+/-9886ns項目實施(6)配置路由轉發,使K8S各節點的Pod能夠互相通信

所有節點創建/etc/sysctl.d/k8s.conf,操作如下:[root@k8s-master~]#

cat<<EOF|tee/etc/sysctl.d/k8s.confnet.ipv4.ip_forward=1net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1EOF[root@k8s-master~]#

modprobe

br_netfilter[root@k8s-master~]#

sysctl-p/etc/sysctl.d/k8s.confnet.ipv4.ip_forward=1net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1(7)開啟IPVS,IPVS(IPVirtualServer,簡稱IPVS),是運行在LVS(LinuxVirtualServer,Linux虛擬服務器)下的提供負載平衡功能的一種技術

在所有節點執行一下操作:項目實施[root@k8s-master~]#cat>/etc/sysconfig/modules/ipvs.modules<<EOFmodprobe--ip_vsmodprobe--ip_vs_rrmodprobe--ip_vs_wrrmodprobe--ip_vs_shmodprobe--nf_conntrack_ipv4EOF[root@k8s-master~]#chmod755/etc/sysconfig/modules/ipvs.modules[root@k8s-master~]#bash/etc/sysconfig/modules/ipvs.modules&&lsmod|grep-eip_vs-enf_conntrack_ipv4nf_conntrack_ipv4150530nf_defrag_ipv4127291nf_conntrack_ipv4ip_vs_sh126880ip_vs_wrr126970ip_vs_rr126000ip_vs1414326ip_vs_rr,ip_vs_sh,ip_vs_wrrnf_conntrack1330532ip_vs,nf_conntrack_ipv4libcrc32c126443xfs,ip_vs,nf_conntrack項目實施所有節點安裝ipset軟件包,ipset是iptables的擴展,因IPVS依賴iptables,故安裝ipset[root@k8s-master~]#yum

install

ipset

ipvsadm-y

(8)安裝Docker,因為K8S只是容器編排工具,容器的起停還是靠Docker引擎[root@k8s-master~]#yum

install-y

yum-utils

device-mapper-persistent-data

lvm2[root@k8s-master~]#yum

install

docker-ce-18.09.6docker-ce-cli-18.09.6containerd.io-y[root@k8s-master~]#mkdir-p/etc/docker[root@k8s-master~]#tee/etc/docker/daemon.json<<-'EOF'{"exec-opts":["native.cgroupdriver=systemd"]}

EOF[root@k8s-master~]#

cat/etc/docker/daemon.json[root@k8s-master~]#

systemctl

daemon-reload[root@k8s-master~]#systemctl

restart

docker[root@k8s-master~]#

systemctl

restart

docker[root@k8s-master~]#

systemctl

enable

docker[root@k8s-master~]#./kubernetes_base.sh#使用此腳本導入離線鏡像,腳本在K8s.tar.gz壓縮包里[root@k8s-master~]#

docker

info|grep

CgroupCgroup

Driver:systemd項目實施注意:若存在依賴問題,將Dokcer-yum.tar.gz也上傳至服務器,配置一個Docker本地源3、kubernetes集群(1)安裝工具所有節點安裝kubelet、kubeadm、kubectl,并將kubelet服務啟動,kubelet服務是管理Pod生命周期的服務,kubeadm是管理整個集群的生命周期,用來部署集群,升級/卸載集群,kubectl是管理集群的客戶端工具,用來管理集群的各個資源[root@k8s-master~]#

yum

install-y

kubelet

kubeadm

kubectl[root@k8s-master~]#systemctl

enable

kubelet&&systemctl

start

kubelet[root@k8s-master~]#

此時kubelet是啟動不成功的,沒關系,當我們初始化完集群,他就會正常(2)初始化Kubernetes集群初始化集群只在k8s-master節點上,k8s-node節點只需要加入集群就可以[root@k8s-master~]#kubeadminit--apiserver-advertise-address27--kubernetes-version="v1.14.1"--pod-network-cidr=/16--image-repository=/google_containers[init]UsingKubernetesversion:v1.14.1[preflight]Runningpre-flightchecks[preflight]PullingimagesrequiredforsettingupaKubernetescluster項目實施…………YourKubernetescontrol-planehasinitializedsuccessfully!Tostartusingyourcluster,youneedtorunthefollowingasaregularuser:mkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/configYoushouldnowdeployapodnetworktothecluster.Run"kubectlapply-f[podnetwork].yaml"withoneoftheoptionslistedat:https://kubernetes.io/docs/concepts/cluster-administration/addons/Thenyoucanjoinanynumberofworkernodesbyrunningthefollowingoneachasroot:kubeadmjoin27:6443--tokeng3l9g9.cahm09633mrjdimq\--discovery-token-ca-cert-hashsha256:677d79cb932bfea0638d70f18a96d5c30a5f3d94e74769179de9bf9390b1da70#本條命令保存下來,node節點加入就是運行這條命令項目實施初始化集群選項解釋:--apiserver-advertise-address:宣告apiserver的地址,替換成自己的master節點--kubernetes-version:指定kubernetes版本--pod-network-cidr:Pod的網段,之后創建的Pod都是這個網段的--image-repository:指定倉庫下載,因為我們的離線鏡像都是阿里云的,所以我們填registry.aliyuncs.com/google_containersApiserver是整個集群的入口,為了安全,每個需要控制K8S的用戶都需要認證信息,kubectl客戶端會與Apiserver交互,并認證,默認會去~/.kube文件夾找認證信息,我們按照初始化集群的說明運行以下命令:[root@k8s-master~]#

mkdir-p$HOME/.kube[root@k8s-master~]#sudo

cp-i/etc/kubernetes/admin.conf$HOME/.kube/config[root@k8s-master~]#sudo

chown$(id-u):$(id-g)$HOME/.kube/config項目實施檢查集群狀況,看是否安裝成功[root@k8s-master~]#

kubectl

get

csNAME

STATUS

MESSAGE

ERRORcontroller-manager

Healthy

okscheduler

Healthy

oketcd-0Healthy{"health":"true"}(3)部署K8S網絡—flannel,flannel是K8S的網絡插件,為Pod提供網絡[root@k8s-master~]#kubectlapply-fyaml/kube-flannel.yamlpodsecuritypolicy.policy/psp.flannel.unprivilegedcreatedclusterrole.rbac.authorization.k8s.io/flannelcreatedclusterrolebinding.rbac.authorization.k8s.io/flannelcreatedserviceaccount/flannelcreatedconfigmap/kube-flannel-cfgcreateddaemonset.apps/kube-flannel-ds-amd64createddaemonset.apps/kube-flannel-ds-arm64createddaemonset.apps/kube-flannel-ds-armcreateddaemonset.apps/kube-flannel-ds-ppc64lecreateddaemonset.apps/kube-flannel-ds-s390xcreate項目實施[root@k8s-master~]#kubectlgetpod-nkube-systemNAMEREADYSTATUSRESTARTSAGEcoredns-8686dcc4fd-jbgtf1/1Running012mcoredns-8686dcc4fd-nc9fs1/1Running012metcd-k8s-master1/1Running011mkube-apiserver-k8s-master1/1Running011mkube-controller-manager-k8s-master1/1Running011mkube-flannel-ds-amd64-ps65f1/1Running036s#flannel已經啟動kube-proxy-ks2kq1/1Running012mkube-scheduler-k8s-master1/1Running011m(4)將Node節點加入集群將上面提到的命令復制到Node節點進行加入集群[root@k8s-master~]#

kubeadm

join27:6443--token

g3l9g9.cahm09633mrjdimq\>--discovery-token-ca-cert-hash

sha256:677d79cb932bfea0638d70f18a96d5c30a5f3d94e74769179de9bf9390b1da70項目實施[root@k8s-master~]#

kubectl

get

nodesNAME

STATUS

ROLES

AGE

VERSIONk8s-master

Ready

master15m

v1.14.1k8s-node

Ready<none>74s

v1.14.1可以看到k8s-node已經Ready。(5)安裝Dashboard

Dashboard是K8S圖形化管理工具,我們使用資源清單的方式創建它們,以下資源清單都在K8S.tar.gz壓縮包[root@k8s-master~]#kubectlapply-fyaml/kubernetes-dashboard.yamlsecret/kubernetes-dashboard-certscreatedserviceaccount/kubernetes-dashboardcreatedrole.rbac.authorization.k8s.io/kubernetes-dashboard-minimalcreatedrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimalcreateddeployment.apps/kubernetes-dashboardcreatedservice/kubernetes-dashboardcreated項目實施[root@k8s-master~]#kubectlapply-fyaml/dashboard-adminuser.yamlserviceaccount/kubernetes-dashboard-admincreatedclusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-admincreated查看kube-system命名空間DashboardPod的狀態[root@k8s-master~]#kubectlgetpod-nkube-systemNAMEREADYSTATUSRESTARTSAGEcoredns-8686dcc4fd-jbgtf1/1Running025mcoredns-8686dcc4fd-nc9fs1/1Running025metcd-k8s-master1/1Running024mkube-apiserver-k8s-master1/1Running024mkube-controller-manager-k8s-master1/1Running024mkube-flannel-ds-amd64-8xkcb1/1Running011mkube-flannel-ds-amd64-ps65f1/1Running013mkube-proxy-kgs2x1/1Running011mkube-proxy-ks2kq1/1Running025mkube-scheduler-k8s-master1/1Running024mkubernetes-dashboard-5f7b999d65-9j4ps1/1Running090s項目實施Dashboard已經是Running狀態,我們訪問一下,在Chrome瀏覽器中輸入(https://masterIP:30000)如圖11-2所示:圖11-2訪問Dashboard項目實施進入Dashboard需要認證,認證信息在Master節點用以下命令獲取:[root@k8s-master~]#kubectl-nkube-systemdescribesecret$(kubectl-nkube-systemgetsecret|grepkubernetes-dashboard-admin-token|awk'{print$1}')Name:kubernetes-dashboard-admin-token-hbbssNamespace:kube-systemLabels:<none>Annotations:kubernetes.io/:kubernetes-dashboard-adminkubernetes.io/service-account.uid:bbb23e74-7124-11ec-a998-1eae18fd17a4Type:kubernetes.io/service-account-tokenData====ca.crt:1025bytesnamespace:11bytestoken: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi1oYmJzcyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50L項目實施m5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImJiYjIzZTc0LTcxMjQtMTFlYy1hOTk4LTFlYWUxOGZkMTdhNCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.Fqz7fWe3ONjmL3ZAuaQjDcpuJdyqstQoURdY_pqdK_xCyrqY9Mu0XR7TfDSzoBbHQeKpI4xPoqaAeDkzJPluq5APN3RVOvvnZ7UQad3LBZIu4gdiNJeXc-faio5iouMaaVJn_1mhuqFXYmfJnox3avS5YtWvmIKtUJd1OiOCTA92AX1xbtHXZkOMDCOLsHHm7117gzoP7tD84KSxa38wn6j2j0jne2TDHOMdDdLiTwAOAM4f76lE5iosTsE_3mz0Fb-S9aYUEF3zopEh58yWulAtYApsd1lP2d1qsRtFbVKKudSBLEUn8qdo2tJ_N9mP0I3W3moc0FAhQSVTd10ujw這一長串的token就是令牌,我們將它復制到瀏覽器即可登陸成功,登錄成功如圖11-3所示。圖11-3登陸K8sDashboard成功至此Kubernetes集群已經部署完成項目實施二、Kubernetes資源對象和kubectl1、資源的介紹Kubenetes集群存在多種資源類型,每種資源對象都有自己的特性查看所有資源,以及它們的縮寫:[root@k8s-master~]#

kubectl

api-resourcesNAME

SHORTNAMES

APIGROUP

NAMESPACED

KINDbindings

true

Bindingcomponentstatuses

cs

false

ComponentStatusconfigmaps

cm

true

ConfigMapendpoints

ep

true

Endpointsevents

ev

true

Eventlimitranges

limits

true

LimitRangenamespaces

ns

false

Namespacenodes

no

false

Nodepersistentvolumeclaims

pvc

true………………項目實施常用資源對象:Pod:Pod是K8s最小單位,在K8s沒有創建容器,只有創建Pod,Pod中可以有一個或多個容器ReplicaSet:簡稱RS,RS是用來控制Pod的,也叫Pod控制器,如果Pod沒有控制器,那它意外退出后,就沒了,如果是有控制器控制的Pod,它會重新啟動這個Pod。而且RS還有多副本的功能,它可以控制Pod有幾個副本,多個副本負載均衡。Deployment:Deployment是在RS之上的控制器,也叫控制控制器的控制器。它控制RS,RS控制Pod,它除了有RS的全部功能,還可以讓Pod滾動更新、回滾的功能。DaemonSet:簡稱ds,Pod控制器,控制Pod在每個節點啟動一份,一樣的,如果Pod意外退出,會自動重啟它。項目實施Name:每個資源都要有自己的名稱,同一個命名空間同樣資源不可重名,不同命名空間相同資源可以同名Namespace:命名空間,當Pod多的時候,不好管理,可以將它們分散到各個命名空間,命名空間即給Pod分類,也隔離了Pod,像我們K8s本身需要的一些組件都是部署在Kube-System中Label:在K8s集群中,所有資源都可以有標簽,如Node節點,Pod,Deployment,標簽為鍵值對LabelSelector:可以用label選擇器來篩選文件Services:在K8s集群中,每個被創建的Pod都有一個唯一的IP,但是隨著Pod的銷毀和調度,Pod的IP得不到確定,Service用來解決這個問題,它通過標簽綁定多個Pod,作為服務的入口,并提供負載均衡。項目實施2、kubectl的使用Kubectl命令語法結構如下:

[root@k8s-master~]#

kubectl[sub_command][resource_type][resource_name][flags]sub_command:kubectl的子命令resource_name:資源的名稱resource_type:資源的類型flags:命令參數kubectl

get#查詢k8s資源kubectl

api-versions#查看所有的api版本kubectl

apply#應用資源配置清單kubectl

attach#同docker

attachkubectl

autoscale#配置Pod的自動伸縮kubectl

cluster-info#輸出集群信息kubectl

config#修改kubeconfig配置文件kubectl

create#通過資源配置清單,或通過資源類型、資源名,創建資源kubectl

describe#查看一個或多個資源的詳細信息\kubectl

delete#刪除一個或多個資源項目實施kubectl

edit#修改已經創建了的資源kubectl

exec#同docker

execkubectl

lable#給資源打上標簽,鍵值對kubectl

logs#輸出Pod中某個容器的日志。kubectl

run#同docker

run3、創建資源對象通過Kubectl

Run創建一個名為Nginx的Deployment,鏡像使用Nginx,鏡像拉取策略為不去外網拉[root@k8s-master~]#kubectl

run

nignx--image=nginx--image-pull-policy=Neverkubectl

run--generator=deployment/apps.v1is

DEPRECATED

and

will

be

removed

in

a

future

version.Use

kubectl

run--generator=run-pod/v1or

kubectl

create

instead.deployment.apps/nignx

created4、查看資源對象

查看Default命名空間下所有Pod:[root@k8s-master~]#kubectl

get

podsNAME

READY

STATUS

RESTARTS

AGEnignx-5f5ff5b8bc-8cfzf1/1Running02m28s項目實施可以看到前面創建的Deployment給我們創建了一個Pod查看Default命名空間下所有資源:[root@k8s-master~]#kubectl

get

allNAME

READY

STATUS

RESTARTS

AGEpod/nignx-5f5ff5b8bc-8cfzf1/1Running04m20s

NAME

TYPE

CLUSTER-IP

EXTERNAL-IP

PORT(S)AGEservice/kubernetes

ClusterIP<none>443/TCP21h

NAME

READY

UP-TO-DATE

AVAILABLE

AGEdeployment.apps/nignx1/1114m20s

NAME

DESIRED

CURRENT

READY

AGEreplicaset.apps/nignx-5f5ff5b8bc1114m20s

前面創建的Nginx

Deployment也幫我們創建了一個Replicaset,Replicaset控制著Pod的副本數,Replicaset(簡稱RS)項目實施5、查看資源的詳細信息:

查看K8s-Node節點的詳細信息[root@k8s-master~]#kubectl

describe

nodes

k8s-nodeName:k8s-nodeRoles:<none>Labels:beta.kubernetes.io/arch=amd64

beta.kubernetes.io/os=linux

kubernetes.io/arch=amd64

kubernetes.io/hostname=k8s-node

kubernetes.io/os=linux項目實施查看Nginx

Deployment的詳細信息[root@k8s-master~]#kubectl

describe

pod

nignx-5f5ff5b8bc-8cfzfEvents:

Type

Reason

Age

From

Message

Normal

Scheduled8m59s

default-scheduler

Successfully

assigned

default/nignx-5f5ff5b8bc-8cfzf

to

k8s-node

Normal

Pulled8m58s

kubelet,k8s-node

Container

image"nginx"already

present

on

machine

Normal

Created8m58s

kubelet,k8s-node

Created

container

nignxNormal

Started8m58s

kubelet,k8s-node

Started

container

nignx

我們在這個Events里面可以看到,首先Pod經過調度器調度到K8s-Node節點,然后Kubelet拉取鏡像,創建Nginx容器,到啟動完成。項目實施6、刪除資源:

刪除Pod[root@k8s-master~]#kubectl

delete

pods

nignx-5f5ff5b8bc-8cfzfpod"nignx-5f5ff5b8bc-8cfzf"deleted[root@k8s-master~]#kubectl

get

podsNAME

READY

STATUS

RESTARTS

AGEnignx-5f5ff5b8bc-4rf8v1/1Running02m27s

前面說了如果Pod意外退出,或者被刪除,如果是有控制器控制的Pod,RS會將它按預期的副本將它再啟動一份,但Pod已經不是原來的Pod了,如果我們想把這個Pod刪除,就必須刪除Deployment控制器刪除Deployment[root@k8s-master~]#kubectl

delete

deploy

nignxdeployment.extensions"nignx"deleted[root@k8s-master~]#kubectl

get

allNAME

TYPE

CLUSTER-IP

EXTERNAL-IP

PORT(S)AGEservice/kubernetes

ClusterIP<none>443/TCP21h可以看到Deployment、RS、Pod全部刪除了項目實施7、部署一個Nginx應用

創建一個4副本的NginxDeployment[root@k8s-master~]#kubectl

run

nignx--image=nginx--image-pull-policy=Never--replicas=4kubectl

run--generator=deployment/apps.v1is

DEPRECATED

and

will

be

removed

in

a

future

version.Use

kubectl

run--generator=run-pod/v1or

kubectl

create

instead.deployment.apps/nignx

created查看是否Pod啟動成功[root@k8s-master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnignx-5f5ff5b8bc-2ddlq1/1Running083snignx-5f5ff5b8bc-942g81/1Running083snignx-5f5ff5b8bc-hhjbz1/1Running083snignx-5f5ff5b8bc-rpvrb1/1Running083s項目實施創建一個Service,綁定Nginx

Deployment并暴露80端口[root@k8s-master~]#kubectl

expose

deploy/nignx--port=80service/nignx

exposed[root@k8s-master~]#kubectl

get

serviceNAME

TYPE

CLUSTER-IP

EXTERNAL-IP

PORT(S)AGEkubernetes

ClusterIP<none>443/TCP22hnignx

ClusterIP43<none>80/TCP6s項目實施測試Nginx應用,訪問上面創建的Service的地址加上暴露的端口[root@k8s-master~]#curl43:80<!DOCTYPEhtml><html><head><title>Welcometonginx!</title><style>body{width:35em;margin:0auto;font-family:Tahoma,Verdana,Arial,sans-serif;}</style></head><body><h1>Welcometonginx!</h1><p>Ifyouseethispage,thenginxwebserverissuccessfullyinstalledand………

使用Curl工具在Master節點測試ClusterIP類型的Service,成功獲取到Nginx網頁信息,說明80端口已經綁定到Pod的80端口,需要注意的是ClusterIP類型的Service只能集群內部可以訪問,需要外部訪問則需要修改成NodePort類型Service。項目實施三、資源清單學習1、資源清單簡介

資源清單用來描述到底創建什么資源,編寫資源清單使用YAML語法,YAML(YAML

Ain't

a

Markup

Language),下面看一個簡單的資源清單:apiVersion:v1kind:Podmetadata:

name:nginx

namespace:defaultspec:

containers:-name:nginx

image:nginx

imagePullPolicy:Never

ports:-containerPort:80項目實施

首先“”三條杠是一個分隔符,可選,如果一個文件中要編寫多個資源就需要分隔符分割這些資源,“apiVersion”為一級字段,代表API群組,“kind”一級字段代表資源類型,“metadata”用來描述這個資源的名稱,屬于哪個命名空間,“spec”就是這個資源獨有的一些特性。這些一級字段都是必須有的

這個資源清單描述了我們需要創建一個nginx的Pod,屬于Default命名空間,當然不寫也是默認Default命名空間,Pod中有一個容器,容器名為Nginx,使用的鏡像Nginx,鏡像拉取策略為在本地拉取,容器暴露端口802、實戰演練

我們通過K8s部署一個開源博客程序來學習資源清單的配置,前面我們使用Docker-Compose啟動它時,可靠性不高,甚至容器退出了也不知情,也不能伸縮擴大,也不能在多個節點中遷移。在k8s上面可以很好的解決這一點。(1)創建命名空間新建Namespace

Wordpress,將需要部署的應用都部署到Wordpress命名空間[root@k8s-master~]#kubectlcreatenamespacewordpressnamespace/wordpresscreated項目實施(2)部署Mysql的Deployment

部署Mysql的Deployment文件mysql.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:mysql-deploynamespace:wordpresslabels:app:mysqlspec:selector:matchLabels:app:mysqltemplate:metadata:labels:app:mysqlspec:項目實施-name:dbhostPath:path:/var/lib/mysqlapiVersion:v1kind:Servicemetadata:name:mysqlnamespace:wordpressspec:selector:app:mysqlports:-name:mysqlportprotocol:TCPport:3306targetPort:dbportcontainers:-name:mysqlimage:mysql:5.6imagePullPolicy:IfNotPresentports:-containerPort:3306name:dbportenv:-name:MYSQL_ROOT_PASSWORDvalue:rootPassW0rd-name:MYSQL_DATABASEvalue:wordpress-name:MYSQL_USERvalue:wordpress-name:MYSQL_PASSWORDvalue:wordpressvolumeMounts:-name:dbmountPath:/var/lib/mysqlvolumes:項目實施使用kubectlcreate命令應用mysql.yaml資源清單,這個清單創建了一個Deployment和一個Service。[root@k8s-master~]#kubectlcreate-fmysql.yamldeployment.apps/mysql-deploycreatedservice/mysqlcreated查看Service[root@k8s-master~]#kubectlget-nwordpressserviceNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEmysqlClusterIP51<none>3306/TCP71s[root@k8s-masterwordpress]#kubectldescribeservicemysql-nwordpressName:mysqlNamespace:wordpressLabels:<none>Annotations:<none>Selector:app=mysqlType:ClusterIPIP:51Port:mysqlport3306/TCPTargetPort:dbport/TCP…….項目實施可以看到這個Service已經綁定到了一個Pod,也就是Endpoints,生成了一個51的ClusterIP,我們在集群內就可以使用此IP加端口3306訪問Mysql服務(3)創建Wordpress服務

創建Wordpress

Deployment文件wordpress.yaml

apiVersion:apps/v1kind:Deploym

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論