项目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

提交评论