标签管理
所谓的标签就是用于为K8S集群的资源做标识,将来基于这个标签进行管理。
K8S一切皆资源,几乎K8S所有资源都支持标签进行管理。
查看K8S集群资源:
[root@master231 pods]# kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
nodes no v1 false Node
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
persistentvolumes pv v1 false PersistentVolume
pods po v1 true Pod
podtemplates v1 true PodTemplate
replicationcontrollers rc v1 true ReplicationController
resourcequotas quota v1 true ResourceQuota
secrets v1 true Secret
serviceaccounts sa v1 true ServiceAccount
services svc v1 true Service
mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration
validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration
customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition
apiservices apiregistration.k8s.io/v1 false APIService
controllerrevisions apps/v1 true ControllerRevision
daemonsets ds apps/v1 true DaemonSet
deployments deploy apps/v1 true Deployment
replicasets rs apps/v1 true ReplicaSet
statefulsets sts apps/v1 true StatefulSet
tokenreviews authentication.k8s.io/v1 false TokenReview
localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview
selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview
selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview
subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview
horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler
cronjobs cj batch/v1 true CronJob
jobs batch/v1 true Job
certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest
leases coordination.k8s.io/v1 true Lease
bgpconfigurations crd.projectcalico.org/v1 false BGPConfiguration
bgppeers crd.projectcalico.org/v1 false BGPPeer
blockaffinities crd.projectcalico.org/v1 false BlockAffinity
caliconodestatuses crd.projectcalico.org/v1 false CalicoNodeStatus
clusterinformations crd.projectcalico.org/v1 false ClusterInformation
felixconfigurations crd.projectcalico.org/v1 false FelixConfiguration
globalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicy
globalnetworksets crd.projectcalico.org/v1 false GlobalNetworkSet
hostendpoints crd.projectcalico.org/v1 false HostEndpoint
ipamblocks crd.projectcalico.org/v1 false IPAMBlock
ipamconfigs crd.projectcalico.org/v1 false IPAMConfig
ipamhandles crd.projectcalico.org/v1 false IPAMHandle
ippools crd.projectcalico.org/v1 false IPPool
ipreservations crd.projectcalico.org/v1 false IPReservation
kubecontrollersconfigurations crd.projectcalico.org/v1 false KubeControllersConfiguration
networkpolicies crd.projectcalico.org/v1 true NetworkPolicy
networksets crd.projectcalico.org/v1 true NetworkSet
endpointslices discovery.k8s.io/v1 true EndpointSlice
events ev events.k8s.io/v1 true Event
flowschemas flowcontrol.apiserver.k8s.io/v1beta2 false FlowSchema
prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta2 false PriorityLevelConfiguration
ingressclasses networking.k8s.io/v1 false IngressClass
ingresses ing networking.k8s.io/v1 true Ingress
networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy
runtimeclasses node.k8s.io/v1 false RuntimeClass
apiservers operator.tigera.io/v1 false APIServer
imagesets operator.tigera.io/v1 false ImageSet
installations operator.tigera.io/v1 false Installation
tigerastatuses operator.tigera.io/v1 false TigeraStatus
poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget
podsecuritypolicies psp policy/v1beta1 false PodSecurityPolicy
bgpconfigurations bgpconfig,bgpconfigs projectcalico.org/v3 false BGPConfiguration
bgppeers projectcalico.org/v3 false BGPPeer
blockaffinities blockaffinity,affinity,affinities projectcalico.org/v3 false BlockAffinity
caliconodestatuses caliconodestatus projectcalico.org/v3 false CalicoNodeStatus
clusterinformations clusterinfo projectcalico.org/v3 false ClusterInformation
felixconfigurations felixconfig,felixconfigs projectcalico.org/v3 false FelixConfiguration
globalnetworkpolicies gnp,cgnp,calicoglobalnetworkpolicies projectcalico.org/v3 false GlobalNetworkPolicy
globalnetworksets projectcalico.org/v3 false GlobalNetworkSet
hostendpoints hep,heps projectcalico.org/v3 false HostEndpoint
ipamconfigurations ipamconfig projectcalico.org/v3 false IPAMConfiguration
ippools projectcalico.org/v3 false IPPool
ipreservations projectcalico.org/v3 false IPReservation
kubecontrollersconfigurations projectcalico.org/v3 false KubeControllersConfiguration
networkpolicies cnp,caliconetworkpolicy,caliconetworkpolicies projectcalico.org/v3 true NetworkPolicy
networksets netsets projectcalico.org/v3 true NetworkSet
profiles projectcalico.org/v3 false Profile
clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding
clusterroles rbac.authorization.k8s.io/v1 false ClusterRole
rolebindings rbac.authorization.k8s.io/v1 true RoleBinding
roles rbac.authorization.k8s.io/v1 true Role
priorityclasses pc scheduling.k8s.io/v1 false PriorityClass
csidrivers storage.k8s.io/v1 false CSIDriver
csinodes storage.k8s.io/v1 false CSINode
csistoragecapacities storage.k8s.io/v1beta1 true CSIStorageCapacity
storageclasses sc storage.k8s.io/v1 false StorageClass
volumeattachments storage.k8s.io/v1 false VolumeAttachment
[root@master231 pods]#
2.1 查看现有的Pod的标签
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-resources 1/1 Running 0 161m <none>
[root@master231 pods]#
2.2 为Pod打标签
[root@master231 pods]# kubectl label pods xiuxian-resources school=violet
pod/xiuxian-resources labeled
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-resources 1/1 Running 0 161m school=violet
[root@master231 pods]#
[root@master231 pods]# kubectl label pods xiuxian-resources address=ShaHe class=linux96
pod/xiuxian-resources labeled
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-resources 1/1 Running 0 161m address=ShaHe,class=linux96,school=violet
[root@master231 pods]#
2.3 修改标签
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-resources 1/1 Running 0 162m address=ShaHe,class=linux96,school=violet
[root@master231 pods]#
[root@master231 pods]#
[root@master231 pods]# kubectl label pods xiuxian-resources class=LINUX96 --overwrite
pod/xiuxian-resources labeled
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-resources 1/1 Running 0 162m address=ShaHe,class=LINUX96,school=violet
[root@master231 pods]#
2.4 标签的删除
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-resources 1/1 Running 0 163m address=ShaHe,class=LINUX96,school=violet
[root@master231 pods]#
[root@master231 pods]# kubectl label pods xiuxian-resources class-
pod/xiuxian-resources unlabeled
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-resources 1/1 Running 0 163m address=ShaHe,school=violet
[root@master231 pods]#
[root@master231 pods]# kubectl label pods xiuxian-resources address- school-
pod/xiuxian-resources unlabeled
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-resources 1/1 Running 0 163m <none>
[root@master231 pods]#
3.1 编写资源清单
[root@master231 pods]# cat 09-pods-labels.yaml
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-labels
# 为资源打标签,可以自定义键值对,将来可以基于标签进行过滤
labels:
apps: xiuxian
spec:
nodeName: worker233
containers:
- image: jasonyin2020/violet-linux-tools:v0.1
name: c1
resources:
requests:
cpu: 0.5
memory: 1Gi
limits:
cpu: 1.5
memory: 2Gi
command:
- tail
- -f
- /etc/hosts
imagePullPolicy: IfNotPresent
[root@master231 pods]#
3.2 创建pod观察标签信息
[root@master231 pods]# kubectl create -f 09-pods-labels.yaml
pod/xiuxian-labels created
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-labels 1/1 Running 0 5s apps=xiuxian
[root@master231 pods]#
3.3 修改标签
[root@master231 pods]# cat 09-pods-labels.yaml
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-labels
# 为资源打标签,可以自定义键值对,将来可以基于标签进行过滤
labels:
apps: FanRenXiuXianZhuan
spec:
nodeName: worker233
containers:
- image: jasonyin2020/violet-linux-tools:v0.1
name: c1
resources:
requests:
cpu: 0.5
memory: 1Gi
limits:
cpu: 1.5
memory: 2Gi
command:
- tail
- -f
- /etc/hosts
imagePullPolicy: IfNotPresent
[root@master231 pods]#
[root@master231 pods]# kubectl create -f 09-pods-labels.yaml # 非幂等性命令,说白了,就是无法重复执行!
Error from server (AlreadyExists): error when creating "09-pods-labels.yaml": pods "xiuxian-labels" already exists
[root@master231 pods]#
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-labels 1/1 Running 0 100s apps=xiuxian
[root@master231 pods]#
[root@master231 pods]# kubectl apply -f 09-pods-labels.yaml # 幂等性命令,可以执行多次,如果资源存在则尝试更新,若资源不存在则尝试创建。
Warning: resource pods/xiuxian-labels is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
pod/xiuxian-labels configured
[root@master231 pods]#
[root@master231 pods]# kubectl apply -f 09-pods-labels.yaml
pod/xiuxian-labels configured
[root@master231 pods]#
[root@master231 pods]# kubectl apply -f 09-pods-labels.yaml
pod/xiuxian-labels configured
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-labels 1/1 Running 0 2m13s apps=FanRenXiuXianZhuan
[root@master231 pods]#
3.4 删除标签
[root@master231 pods]# cat 09-pods-labels.yaml
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-labels
# 为资源打标签,可以自定义键值对,将来可以基于标签进行过滤
#labels:
# apps: FanRenXiuXianZhuan
spec:
nodeName: worker233
containers:
- image: jasonyin2020/violet-linux-tools:v0.1
name: c1
resources:
requests:
cpu: 0.5
memory: 1Gi
limits:
cpu: 1.5
memory: 2Gi
command:
- tail
- -f
- /etc/hosts
imagePullPolicy: IfNotPresent
[root@master231 pods]#
[root@master231 pods]#
[root@master231 pods]# kubectl apply -f 09-pods-labels.yaml
pod/xiuxian-labels configured
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-labels 1/1 Running 0 4m18s <none>
[root@master231 pods]#
声明式和响应式的区别:
相同点:
都可以管理资源。
不同点:
- 1.声明式修改需要先更改配置文件,而后apply配置文件使之生效,将来传输比较方便;
- 2.响应式修改立即生效,将来配置时基于文件传输不太方便,需要单独使用shell脚本来实现;
4.1 环境准备
[root@master231 pods]# kubectl apply -f 01-pods-single-xiuxian.yaml
pod/xiuxian-xixi created
[root@master231 pods]#
[root@master231 pods]# kubectl get pods -o wide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
xiuxian-labels 1/1 Running 0 11m 10.100.140.89 worker233 <none> <none> <none>
xiuxian-xixi 1/1 Running 0 23s 10.100.140.90 worker233 <none> <none> <none>
[root@master231 pods]#
[root@master231 pods]# kubectl label pod xiuxian-labels class=linux96
pod/xiuxian-labels labeled
[root@master231 pods]#
[root@master231 pods]# kubectl label pod xiuxian-xixi school=violet
pod/xiuxian-xixi labeled
[root@master231 pods]#
[root@master231 pods]# kubectl label pod xiuxian-xixi class=linux97
pod/xiuxian-xixi labeled
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-labels 1/1 Running 0 12m class=linux96
xiuxian-xixi 1/1 Running 0 75s class=linux97,school=violet
[root@master231 pods]#
4.2 基于标签过滤Pod之包含特定标签
[root@master231 pods]# kubectl get pods --show-labels -l class
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-labels 1/1 Running 0 13m class=linux96
xiuxian-xixi 1/1 Running 0 114s class=linux97,school=violet
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels -l school
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-xixi 1/1 Running 0 2m class=linux97,school=violet
[root@master231 pods]#
4.3 基于标签过滤pod之含特定值
[root@master231 pods]# kubectl apply -f 02-pods-multiple-xiuxian.yaml
pod/xiuxian-haha created
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-haha 2/2 Running 0 6s <none>
xiuxian-labels 1/1 Running 0 13m class=linux96
xiuxian-xixi 1/1 Running 0 2m35s class=linux97,school=violet
[root@master231 pods]#
[root@master231 pods]# kubectl label pod xiuxian-haha class=linux98
pod/xiuxian-haha labeled
[root@master231 pods]#
[root@master231 pods]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-haha 2/2 Running 0 27s class=linux98
xiuxian-labels 1/1 Running 0 14m class=linux96
xiuxian-xixi 1/1 Running 0 2m56s class=linux97,school=violet
[root@master231 pods]#
[root@master231 pods]# kubectl get pod --show-labels -l class
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-haha 2/2 Running 0 2m22s class=linux98
xiuxian-labels 1/1 Running 0 16m class=linux96
xiuxian-xixi 1/1 Running 0 4m51s class=linux97,school=violet
[root@master231 pods]#
[root@master231 pods]# kubectl get pod --show-labels -l "class in (linux96,linux98)"
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-haha 2/2 Running 0 2m24s class=linux98
xiuxian-labels 1/1 Running 0 16m class=linux96
[root@master231 pods]#
[root@master231 pods]# kubectl get pod --show-labels -l "class notin (linux96,linux98)"
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-xixi 1/1 Running 0 5m35s class=linux97,school=violet
[root@master231 pods]#
4.4 基于标签删除资源
[root@master231 pods]# kubectl get pod --show-labels -l class
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-haha 2/2 Running 0 4m class=linux98
xiuxian-labels 1/1 Running 0 17m class=linux96
xiuxian-xixi 1/1 Running 0 6m29s class=linux97,school=violet
[root@master231 pods]#
[root@master231 pods]# kubectl get pod --show-labels -l "class notin (linux96,linux98)"
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-xixi 1/1 Running 0 6m37s class=linux97,school=violet
[root@master231 pods]#
[root@master231 pods]#
[root@master231 pods]# # kubectl delete pod --show-labels -l "class notin (linux96,linux98)"
[root@master231 pods]#
[root@master231 pods]# kubectl get pod --show-labels -l class
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-haha 2/2 Running 0 4m17s class=linux98
xiuxian-labels 1/1 Running 0 18m class=linux96
xiuxian-xixi 1/1 Running 0 6m46s class=linux97,school=violet
[root@master231 pods]#
[root@master231 pods]# # kubectl delete pod -l "class notin (linux96,linux98)"
[root@master231 pods]#
[root@master231 pods]# kubectl delete pod -l "class notin (linux96,linux98)"
pod "xiuxian-xixi" deleted
[root@master231 pods]#
[root@master231 pods]# kubectl get pod --show-labels -l class
NAME READY STATUS RESTARTS AGE LABELS
xiuxian-haha 2/2 Running 0 4m49s class=linux98
xiuxian-labels 1/1 Running 0 18m class=linux96
[root@master231 pods]#
[root@master231 pods]# kubectl delete pod -l "class in (linux96,linux98)"
pod "xiuxian-haha" deleted
pod "xiuxian-labels" deleted
[root@master231 pods]#
[root@master231 pods]# kubectl get pod --show-labels -l class
No resources found in default namespace.
[root@master231 pods]#
常见的控制器
常见的控制器之rc控制器
rc的全称为ReplicationController,简称rc,该控制器可以控制指定Pod副本数量始终存活。
2.1 编写资源清单
[root@master231 replicationcontrollers]# cat 01-rc-xiuxian.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-xiuxian
labels:
apps: xiuxian
spec:
# 指的Pod的副本数量
replicas: 3
# 标签选择器,基于标签关联Pod
selector:
version: v1
# 定义Pod的模板,将来创建Pod时基于该模板进行创建
template:
metadata:
labels:
version: v1
school: violet
class: linux96
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1
name: xiuxian
[root@master231 replicationcontrollers]#
2.2 创建资源
[root@master231 replicationcontrollers]# kubectl apply -f 01-rc-xiuxian.yaml
replicationcontroller/rc-xiuxian created
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl get rc,pod --show-labels
NAME DESIRED CURRENT READY AGE LABELS
replicationcontroller/rc-xiuxian 3 3 3 67s apps=xiuxian
NAME READY STATUS RESTARTS AGE LABELS
pod/rc-xiuxian-6p6l4 1/1 Running 0 67s class=linux96,school=violet,version=v1
pod/rc-xiuxian-dhtbf 1/1 Running 0 67s class=linux96,school=violet,version=v1
pod/rc-xiuxian-nwxmz 1/1 Running 0 67s class=linux96,school=violet,version=v1
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl get rc,pod --show-labels -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR LABELS
replicationcontroller/rc-xiuxian 3 3 3 71s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 version=v1 apps=xiuxian
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/rc-xiuxian-6p6l4 1/1 Running 0 71s 10.100.140.92 worker233 <none> <none> class=linux96,school=violet,version=v1
pod/rc-xiuxian-dhtbf 1/1 Running 0 71s 10.100.203.149 worker232 <none> <none> class=linux96,school=violet,version=v1
pod/rc-xiuxian-nwxmz 1/1 Running 0 71s 10.100.203.148 worker232 <none> <none> class=linux96,school=violet,version=v1
[root@master231 replicationcontrollers]#
2.3 查看Pod被哪个控制器管理
[root@master231 replicationcontrollers]# kubectl get pods -l version=v1
NAME READY STATUS RESTARTS AGE
rc-xiuxian-6p6l4 1/1 Running 0 2m36s
rc-xiuxian-dhtbf 1/1 Running 0 2m36s
rc-xiuxian-nwxmz 1/1 Running 0 2m36s
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl describe pod | grep "Controlled By"
Controlled By: ReplicationController/rc-xiuxian
Controlled By: ReplicationController/rc-xiuxian
Controlled By: ReplicationController/rc-xiuxian
[root@master231 replicationcontrollers]#
2.4 删除资源验证Pod副本数量始终存活
[root@master231 replicationcontrollers]# kubectl get pods -l version=v1
NAME READY STATUS RESTARTS AGE
rc-xiuxian-6p6l4 1/1 Running 0 4m38s
rc-xiuxian-dhtbf 1/1 Running 0 4m38s
rc-xiuxian-nwxmz 1/1 Running 0 4m38s
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl delete pods -l version=v1
pod "rc-xiuxian-6p6l4" deleted
pod "rc-xiuxian-dhtbf" deleted
pod "rc-xiuxian-nwxmz" deleted
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl get pods -l version=v1
NAME READY STATUS RESTARTS AGE
rc-xiuxian-mvddc 1/1 Running 0 5s
rc-xiuxian-rzds4 1/1 Running 0 5s
rc-xiuxian-z24z5 1/1 Running 0 5s
[root@master231 replicationcontrollers]#
常见的控制器之Service
所谓的Service翻译过来表示'服务',其作用也是基于标签关联Pod,可以将Pod的端口进行暴露。从而提供统一的服务。
Service检查svc。
默认有四个Service类型:
ClusterIP:
一般情况下是K8S集群内部服务互相访问的一种类型。
NodePort:
在ClusterIP基础之上,早期版本监听了所有的worker节点特定端口,新版本会有对应的iptables规则做NAT。
LoadBalancer:
一般情况下是在云厂商的K8S环境使用。
ExternalName:
一般情况下用于映射K8S集群外部的某个特定服务。
svc拥有三个主要特征:
- 1.基于标签关联后端的Pod,为Pod提供统一的访问入口;
- 2.拥有服务发现的特征,当后端关联的Pod的IP地址发生变动时,会自动更新Endpoints列表;
- 3.拥有负载均衡的能力,该能力底层是由kube-proxy组件提供;
2.1 基于rc资源暴露,从而创建svc
[root@master231 replicationcontrollers]# kubectl expose rc rc-xiuxian --port=80
service/rc-xiuxian exposed
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.200.0.1 <none> 443/TCP 28h
rc-xiuxian ClusterIP 10.200.196.245 <none> 80/TCP 15s
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.200.0.1 <none> 443/TCP 28h
rc-xiuxian ClusterIP 10.200.196.245 <none> 80/TCP 17s
[root@master231 replicationcontrollers]#
2.2 svc会服务发现对应后端的Pod地址
[root@master231 replicationcontrollers]# kubectl describe svc rc-xiuxian
Name: rc-xiuxian
Namespace: default
Labels: apps=xiuxian
Annotations: <none>
Selector: version=v1
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.200.196.245
IPs: 10.200.196.245
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.100.140.94:80,10.100.203.152:80,10.100.203.153:80
Session Affinity: None
Events: <none>
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl get pods -l version=v1 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-xiuxian-dgnqj 1/1 Running 0 8m5s 10.100.203.153 worker232 <none> <none>
rc-xiuxian-fz4sp 1/1 Running 0 8m5s 10.100.140.94 worker233 <none> <none>
rc-xiuxian-m6m4v 1/1 Running 0 8m5s 10.100.203.152 worker232 <none> <none>
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl delete pods -l version=v1
pod "rc-xiuxian-dgnqj" deleted
pod "rc-xiuxian-fz4sp" deleted
pod "rc-xiuxian-m6m4v" deleted
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl get pods -l version=v1 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-xiuxian-bg7ch 1/1 Running 0 8s 10.100.140.95 worker233 <none> <none>
rc-xiuxian-d5ng4 1/1 Running 0 8s 10.100.203.154 worker232 <none> <none>
rc-xiuxian-mjs4q 1/1 Running 0 8s 10.100.203.155 worker232 <none> <none>
[root@master231 replicationcontrollers]#
[root@master231 replicationcontrollers]# kubectl describe svc rc-xiuxian
Name: rc-xiuxian
Namespace: default
Labels: apps=xiuxian
Annotations: <none>
Selector: version=v1
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.200.196.245
IPs: 10.200.196.245
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.100.140.95:80,10.100.203.154:80,10.100.203.155:80
Session Affinity: None
Events: <none>
[root@master231 replicationcontrollers]#
2.3 通过svc提供统一的访问入口
[root@master231 replicationcontrollers]# curl 10.200.196.245
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>lax apps v1</title>
<style>
div img {
width: 900px;
height: 600px;
margin: 0;
}
</style>
</head>
<body>
<h1 style="color: green">凡人修仙传 v1 </h1>
<div>
<img src="1.jpg">
<div>
</body>
</html>
[root@master231 replicationcontrollers]#
3.1 快速获取资源清单的模板
[root@master231 service]# kubectl expose rc rc-xiuxian --port=80 -o yaml --dry-run=client
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
apps: xiuxian
name: rc-xiuxian
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
version: v1
status:
loadBalancer: {}
[root@master231 service]#
3.2 编写资源清单
[root@master231 service]#
[root@master231 service]# cat 01-svc-xiuxian.yaml
apiVersion: v1
kind: Service
metadata:
labels:
apps: xiuxian
name: svc-xiuxian
spec:
# 配置端口映射
ports:
# 表示svc的端口
- port: 90
# 声明要用的协议,默认就是TCP,有效值为: "TCP", "UDP", and "SCTP"
protocol: TCP
# Pod的端口地址
targetPort: 80
# 关联后端的Pod
selector:
version: v1
[root@master231 service]#
3.3 创建svc并查看svc的详细信息
[root@master231 service]# kubectl apply -f 01-svc-xiuxian.yaml
service/svc-xiuxian created
[root@master231 service]#
[root@master231 service]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.200.0.1 <none> 443/TCP 28h
rc-xiuxian ClusterIP 10.200.196.245 <none> 80/TCP 13m
svc-xiuxian ClusterIP 10.200.25.148 <none> 90/TCP 3s
[root@master231 service]#
[root@master231 service]# kubectl get svc svc-xiuxian
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-xiuxian ClusterIP 10.200.25.148 <none> 90/TCP 8s
[root@master231 service]#
[root@master231 service]# kubectl describe svc svc-xiuxian
Name: svc-xiuxian
Namespace: default
Labels: apps=xiuxian
Annotations: <none>
Selector: version=v1
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.200.25.148
IPs: 10.200.25.148
Port: <unset> 90/TCP
TargetPort: 80/TCP
Endpoints: 10.100.140.95:80,10.100.203.154:80,10.100.203.155:80
Session Affinity: None
Events: <none>
[root@master231 service]#
3.4 访问测试
[root@master231 service]# curl 10.200.25.148:90
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>lax apps v1</title>
<style>
div img {
width: 900px;
height: 600px;
margin: 0;
}
</style>
</head>
<body>
<h1 style="color: green">凡人修仙传 v1 </h1>
<div>
<img src="1.jpg">
<div>
</body>
</html>
[root@master231 service]#
3.5 测试验证svc拥有负载均衡的能力
[root@master231 service]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-xiuxian-bg7ch 1/1 Running 0 8m43s 10.100.140.95 worker233 <none> <none>
rc-xiuxian-d5ng4 1/1 Running 0 8m43s 10.100.203.154 worker232 <none> <none>
rc-xiuxian-mjs4q 1/1 Running 0 8m43s 10.100.203.155 worker232 <none> <none>
[root@master231 service]#
[root@master231 service]# kubectl exec -it rc-xiuxian-bg7ch -- sh
/ # echo 11111111 > /usr/share/nginx/html/index.html
/ #
[root@master231 service]#
[root@master231 service]# kubectl exec -it rc-xiuxian-d5ng4 -- sh
/ # echo 222222222 > /usr/share/nginx/html/index.html
/ #
[root@master231 service]#
[root@master231 service]# kubectl exec -it rc-xiuxian-mjs4q -- sh
/ # echo 3333333333 > /usr/share/nginx/html/index.html
/ #
[root@master231 service]#
[root@master231 service]#
[root@master231 service]# kubectl get svc svc-xiuxian
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-xiuxian ClusterIP 10.200.25.148 <none> 90/TCP 3m30s
[root@master231 service]#
[root@master231 service]# for i in `seq 10`;do curl 10.200.25.148:90;done
222222222
11111111
222222222
222222222
222222222
3333333333
222222222
3333333333
11111111
222222222
[root@master231 service]#
常见的控制器之rs
rs全称为ReplicaSet,也是K8S集群的一个副本控制器,功能和rc类似。
相比于rc而言,功能更加丰富。且更加轻量级。
2.1 基于标签匹配matchLabels
[root@master231 replicasets]# cat 01-rs-matchLabels-xiuxian.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-xiuxian
labels:
apps: xiuxian
spec:
replicas: 5
selector:
# 匹配Pod时基于标签匹配
matchLabels:
version: v1
template:
metadata:
labels:
version: v1
school: violet
class: linux96
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1
name: xiuxian
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl get rs,po
NAME DESIRED CURRENT READY AGE
replicaset.apps/rs-xiuxian 5 5 5 84s
NAME READY STATUS RESTARTS AGE
pod/rs-xiuxian-9jlbb 1/1 Running 0 84s
pod/rs-xiuxian-j8xlz 1/1 Running 0 83s
pod/rs-xiuxian-qj9x6 1/1 Running 0 84s
pod/rs-xiuxian-wgx4z 1/1 Running 0 84s
pod/rs-xiuxian-zsdsw 1/1 Running 0 83s
[root@master231 replicasets]#
[root@master231 replicasets]#
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl delete pods --all
pod "rs-xiuxian-9jlbb" deleted
pod "rs-xiuxian-j8xlz" deleted
pod "rs-xiuxian-qj9x6" deleted
pod "rs-xiuxian-wgx4z" deleted
pod "rs-xiuxian-zsdsw" deleted
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl get rs,po
NAME DESIRED CURRENT READY AGE
replicaset.apps/rs-xiuxian 5 5 5 96s
NAME READY STATUS RESTARTS AGE
pod/rs-xiuxian-bfn8n 1/1 Running 0 4s
pod/rs-xiuxian-bzncd 1/1 Running 0 4s
pod/rs-xiuxian-czkrr 1/1 Running 0 4s
pod/rs-xiuxian-kn8hb 1/1 Running 0 4s
pod/rs-xiuxian-n2x7p 1/1 Running 0 4s
[root@master231 replicasets]#
2.2 基于标签表达式
[root@master231 replicasets]# kubectl run test01 --image=registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 -l version=v1
pod/test01 created
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl run test02 --image=registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 -l version=v2
pod/test02 created
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl run test03 --image=registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 -l version=v3
pod/test03 created
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl run test04 --image=registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 -l version=v4
pod/test04 created
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl run test05 --image=registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 -l version=v5
pod/test05 created
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
test01 1/1 Running 0 25s version=v1
test02 1/1 Running 0 20s version=v2
test03 1/1 Running 0 16s version=v3
test04 1/1 Running 0 11s version=v4
test05 1/1 Running 0 7s version=v5
[root@master231 replicasets]#
[root@master231 replicasets]# cat 02-rs-matchExpressions-xiuxian.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-xiuxian-matchexpressions
labels:
apps: xiuxian
spec:
replicas: 5
selector:
# 匹配Pod时基于标签表达式
matchExpressions:
# 指定标签的key
- key: version
# 指定标签的值,可以有多个
values:
- v1
- v2
- v3
# 声明key和value之间的关系,有效值为: In, NotIn, Exists and DoesNotExist
# In:
# key的值必须在vlaues规定的值列表中之一。
# NotIn:
# 和In相反。
# Exists:
# 如果是存在的话, 意味着value可以不写,表示只要存在指定的key即可。values任意。
# DoesNotExist:
# 如果是不存在的话,意味着value可以不写,表示只要不存在指定的key即可。values任意。
operator: In
template:
metadata:
labels:
version: v1
school: violet
class: linux96
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1
name: xiuxian
[root@master231 replicasets]#
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl apply -f 02-rs-matchExpressions-xiuxian.yaml
replicaset.apps/rs-xiuxian-matchexpressions created
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rs-xiuxian-matchexpressions-2brnv 1/1 Running 0 3s 10.100.140.103 worker233 <none> <none>
rs-xiuxian-matchexpressions-c8tx8 1/1 Running 0 3s 10.100.203.164 worker232 <none> <none>
test01 1/1 Running 0 60s 10.100.203.161 worker232 <none> <none>
test02 1/1 Running 0 55s 10.100.203.162 worker232 <none> <none>
test03 1/1 Running 0 51s 10.100.140.101 worker233 <none> <none>
test04 1/1 Running 0 46s 10.100.203.163 worker232 <none> <none>
test05 1/1 Running 0 42s 10.100.140.102 worker233 <none> <none>
[root@master231 replicasets]#
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl get rs
NAME DESIRED CURRENT READY AGE
rs-xiuxian-matchexpressions 5 5 5 18s
[root@master231 replicasets]#
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rs-xiuxian-matchexpressions-2brnv 1/1 Running 0 28s class=linux96,school=violet,version=v1
rs-xiuxian-matchexpressions-c8tx8 1/1 Running 0 28s class=linux96,school=violet,version=v1
test01 1/1 Running 0 85s version=v1
test02 1/1 Running 0 80s version=v2
test03 1/1 Running 0 76s version=v3
test04 1/1 Running 0 71s version=v4
test05 1/1 Running 0 67s version=v5
[root@master231 replicasets]#
[root@master231 replicasets]# kubectl get rs -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
rs-xiuxian-matchexpressions 5 5 5 38s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 version in (v1,v2,v3)
[root@master231 replicasets]#
常见的控制器之deploy
deploy全称为deployments,翻译为中文是'部署'的意思。
该控制器不直接控制Pod,而是调用rs控制pod副本数量,且支持声明式更新。
2.1 基于matchLabels实战
[root@master231 deployments]# cat 01-deploy-matchLabels-xiuxian.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-xiuxian
labels:
apps: xiuxian
spec:
replicas: 5
selector:
matchLabels:
version: v1
template:
metadata:
labels:
version: v1
school: violet
class: linux96
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1
name: xiuxian
[root@master231 deployments]#
[root@master231 deployments]# kubectl apply -f 01-deploy-matchLabels-xiuxian.yaml
deployment.apps/deploy-xiuxian created
[root@master231 deployments]#
[root@master231 deployments]# kubectl get deploy,rs,po -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/deploy-xiuxian 5/5 5 5 9s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 version=v1
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/deploy-xiuxian-9ddcfd7db 5 5 5 9s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 pod-template-hash=9ddcfd7db,version=v1
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/deploy-xiuxian-9ddcfd7db-2np97 1/1 Running 0 9s 10.100.203.172 worker232 <none> <none>
pod/deploy-xiuxian-9ddcfd7db-4jbl6 1/1 Running 0 9s 10.100.203.173 worker232 <none> <none>
pod/deploy-xiuxian-9ddcfd7db-9w6v4 1/1 Running 0 9s 10.100.140.109 worker233 <none> <none>
pod/deploy-xiuxian-9ddcfd7db-nvb9m 1/1 Running 0 9s 10.100.140.108 worker233 <none> <none>
pod/deploy-xiuxian-9ddcfd7db-vhfs4 1/1 Running 0 9s 10.100.203.174 worker232 <none> <none>
[root@master231 deployments]#
[root@master231 deployments]# kubectl get deployments.apps deploy-xiuxian -o yaml | grep "image:"
- image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1
[root@master231 deployments]#
[root@master231 deployments]# kubectl edit deployments.apps deploy-xiuxian
deployment.apps/deploy-xiuxian edited
[root@master231 deployments]#
[root@master231 deployments]# kubectl get deployments.apps deploy-xiuxian -o yaml | grep "image:"
- image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v2
[root@master231 deployments]#
[root@master231 deployments]# kubectl get deploy,rs,po -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/deploy-xiuxian 5/5 5 5 2m23s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v2 version=v1
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/deploy-xiuxian-67bc8cf4ff 5 5 5 32s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v2 pod-template-hash=67bc8cf4ff,version=v1
replicaset.apps/deploy-xiuxian-9ddcfd7db 0 0 0 2m23s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 pod-template-hash=9ddcfd7db,version=v1
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/deploy-xiuxian-67bc8cf4ff-55zrp 1/1 Running 0 32s 10.100.203.175 worker232 <none> <none>
pod/deploy-xiuxian-67bc8cf4ff-ctwp9 1/1 Running 0 30s 10.100.203.177 worker232 <none> <none>
pod/deploy-xiuxian-67bc8cf4ff-j6qml 1/1 Running 0 32s 10.100.140.111 worker233 <none> <none>
pod/deploy-xiuxian-67bc8cf4ff-m9ml9 1/1 Running 0 31s 10.100.203.176 worker232 <none> <none>
pod/deploy-xiuxian-67bc8cf4ff-q2pf7 1/1 Running 0 32s 10.100.140.110 worker233 <none> <none>
[root@master231 deployments]#
[root@master231 deployments]# curl 10.100.140.111
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>lax apps v2</title>
<style>
div img {
width: 900px;
height: 600px;
margin: 0;
}
</style>
</head>
<body>
<h1 style="color: red">凡人修仙传 v2 </h1>
<div>
<img src="2.jpg">
<div>
</body>
</html>
[root@master231 deployments]#
[root@master231 deployments]# kubectl delete -f 01-deploy-matchLabels-xiuxian.yaml
deployment.apps "deploy-xiuxian" deleted
[root@master231 deployments]#
[root@master231 deployments]# kubectl get deploy,rs,po -o wide
No resources found in default namespace.
[root@master231 deployments]#
2.2 基于matchLabels实战
[root@master231 deployments]# cat 02-deploy-matchExpressions-xiuxian.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-xiuxian-matchexpressions
labels:
apps: xiuxian
spec:
replicas: 5
selector:
matchExpressions:
- key: version
values:
- v1
- v2
- v3
operator: In
template:
metadata:
labels:
version: v1
school: violet
class: linux96
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1
name: xiuxian
[root@master231 deployments]#
[root@master231 deployments]# kubectl apply -f 02-deploy-matchExpressions-xiuxian.yaml
deployment.apps/deploy-xiuxian-matchexpressions created
[root@master231 deployments]#
[root@master231 deployments]# kubectl get deploy,rs,po -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/deploy-xiuxian-matchexpressions 5/5 5 5 2s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 version in (v1,v2,v3)
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/deploy-xiuxian-matchexpressions-9ddcfd7db 5 5 5 2s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 pod-template-hash=9ddcfd7db,version in (v1,v2,v3)
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/deploy-xiuxian-matchexpressions-9ddcfd7db-jq9t7 1/1 Running 0 2s 10.100.203.178 worker232 <none> <none>
pod/deploy-xiuxian-matchexpressions-9ddcfd7db-n76n8 1/1 Running 0 2s 10.100.140.112 worker233 <none> <none>
pod/deploy-xiuxian-matchexpressions-9ddcfd7db-p4jns 1/1 Running 0 2s 10.100.140.113 worker233 <none> <none>
pod/deploy-xiuxian-matchexpressions-9ddcfd7db-swthk 1/1 Running 0 2s 10.100.203.180 worker232 <none> <none>
pod/deploy-xiuxian-matchexpressions-9ddcfd7db-vzfjl 1/1 Running 0 2s 10.100.203.179 worker232 <none> <none>
[root@master231 deployments]#
[root@master231 deployments]# curl 10.100.203.180
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>lax apps v1</title>
<style>
div img {
width: 900px;
height: 600px;
margin: 0;
}
</style>
</head>
<body>
<h1 style="color: green">凡人修仙传 v1 </h1>
<div>
<img src="1.jpg">
<div>
</body>
</html>
[root@master231 deployments]#
[root@master231 deployments]#
[root@master231 deployments]# vim 02-deploy-matchExpressions-xiuxian.yaml
[root@master231 deployments]#
[root@master231 deployments]# kubectl apply -f 02-deploy-matchExpressions-xiuxian.yaml
deployment.apps/deploy-xiuxian-matchexpressions configured
[root@master231 deployments]#
[root@master231 deployments]# kubectl get deployments.apps deploy-xiuxian-matchexpressions -o yaml | grep "image:"
- image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v2
[root@master231 deployments]#
[root@master231 deployments]# kubectl get deploy,rs,po -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/deploy-xiuxian-matchexpressions 5/5 5 5 66s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v2 version in (v1,v2,v3)
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/deploy-xiuxian-matchexpressions-67bc8cf4ff 5 5 5 36s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v2 pod-template-hash=67bc8cf4ff,version in (v1,v2,v3)
replicaset.apps/deploy-xiuxian-matchexpressions-9ddcfd7db 0 0 0 66s xiuxian registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 pod-template-hash=9ddcfd7db,version in (v1,v2,v3)
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/deploy-xiuxian-matchexpressions-67bc8cf4ff-2ddwv 1/1 Running 0 36s 10.100.140.114 worker233 <none> <none>
pod/deploy-xiuxian-matchexpressions-67bc8cf4ff-cfzvk 1/1 Running 0 35s 10.100.203.182 worker232 <none> <none>
pod/deploy-xiuxian-matchexpressions-67bc8cf4ff-krvzm 1/1 Running 0 36s 10.100.140.115 worker233 <none> <none>
pod/deploy-xiuxian-matchexpressions-67bc8cf4ff-p2wfs 1/1 Running 0 36s 10.100.203.181 worker232 <none> <none>
pod/deploy-xiuxian-matchexpressions-67bc8cf4ff-xnrpl 1/1 Running 0 35s 10.100.203.183 worker232 <none> <none>
[root@master231 deployments]#
[root@master231 deployments]# curl 10.100.203.183
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>lax apps v2</title>
<style>
div img {
width: 900px;
height: 600px;
margin: 0;
}
</style>
</head>
<body>
<h1 style="color: red">凡人修仙传 v2 </h1>
<div>
<img src="2.jpg">
<div>
</body>
</html>
[root@master231 deployments]#
Pod的服务发现Service之NodePort类型
[root@master231 service]# cat 02-svc-NodePort-xiuxian.yaml
apiVersion: v1
kind: Service
metadata:
labels:
apps: xiuxian
name: svc-xiuxian-nodeport
spec:
type: NodePort
ports:
- port: 90
protocol: TCP
targetPort: 80
# 声明worker节点的转发的端口,默认的有效范围是: 30000-32767
nodePort: 30080
selector:
version: v1
[root@master231 service]#
[root@master231 service]#
[root@master231 service]# kubectl apply -f 02-svc-NodePort-xiuxian.yaml
service/svc-xiuxian-nodeport created
[root@master231 service]#
[root@master231 service]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.200.0.1 <none> 443/TCP 30h
rc-xiuxian ClusterIP 10.200.196.245 <none> 80/TCP 116m
svc-xiuxian ClusterIP 10.200.25.148 <none> 90/TCP 102m
svc-xiuxian-nodeport NodePort 10.200.21.38 <none> 90:30080/TCP 6s
[root@master231 service]#
http://10.0.0.231:30080/
http://10.0.0.232:30080/
http://10.0.0.233:30080/
常见的控制器之ds控制器
ds的全称为DaemonSets,简称ds,表示守护进程。
其特征就是在每个worker节点有且仅有一个Pod。
其应用场景就是一些需要守护进程的案例,比如: zabbix-agent,node-exporter,filebeat等等。
[root@master231 daemonsets]# cat 01-ds-xiuxian.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ds-xiuxian
spec:
selector:
matchLabels:
apps: xiuxian
template:
metadata:
labels:
apps: xiuxian
spec:
containers:
- name: c1
image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
[root@master231 daemonsets]#
[root@master231 daemonsets]# kubectl apply -f 01-ds-xiuxian.yaml
daemonset.apps/ds-xiuxian created
[root@master231 daemonsets]#
[root@master231 daemonsets]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ds-xiuxian-8bpqb 1/1 Running 0 5s 10.100.203.184 worker232 <none> <none>
ds-xiuxian-n7zkt 1/1 Running 0 5s 10.100.140.116 worker233 <none> <none>
[root@master231 daemonsets]#
常见的控制器之jobs
所谓的jobs,就是K8S用于完成一次性任务的资源类型。
有点类似于Linux的at命令,表示只执行一次的任务,比如数据的全量备份,全量恢复,定时关机等。
2.1 导入镜像
[root@worker232 ~]# wget http://192.168.16.253/Resources/Kubernetes/Case-Demo/violet-perl.5.34.tar.gz
[root@worker232 ~]# docker load -i violet-perl.5.34.tar.gz
2.2 编写资源清单
[root@master231 jobs]# cat 01-jobs-pi.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
# 定义Pod的模板
template:
spec:
nodeName: worker232
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
# 任务执行失败重启的次数
backoffLimit: 4
[root@master231 jobs]#
[root@master231 jobs]# kubectl apply -f 01-jobs-pi.yaml
job.batch/pi created
[root@master231 jobs]#
[root@master231 jobs]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pi-gbbpn 0/1 Completed 0 8s 10.100.203.185 worker232 <none> <none>
[root@master231 jobs]#
[root@master231 jobs]# kubectl logs pi-gbbpn
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
[root@master231 jobs]#
常见的控制器之cj
所谓的cj是CronJobs的简称,底层周期性调用Job控制器。
有点类似于Linux的"crontab"工具。
其应用场景在于周期性任务的情况,比如增量备份,生成报表,周期性周报,日报?
[root@master231 cronjobs]# cat 01-cj.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "* * * * *"
# 定义Job模板
jobTemplate:
spec:
# 定义Pod模板
template:
spec:
containers:
- name: hello
image: registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo "violet linux96 Hello from the Kubernetes cluster ..."
restartPolicy: OnFailure
[root@master231 cronjobs]#
[root@master231 cronjobs]# kubectl apply -f 01-cj.yaml
cronjob.batch/hello created
[root@master231 cronjobs]#
[root@master231 cronjobs]# kubectl get cj,job,po -o wide
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE CONTAINERS IMAGES SELECTOR
cronjob.batch/hello * * * * * False 0 5s 86s hello registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 <none>
NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
job.batch/hello-29069423 1/1 3s 65s hello registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 controller-uid=a280918c-a8d9-4970-ab28-92c868242962
job.batch/hello-29069424 1/1 2s 5s hello registry.cn-hangzhou.aliyuncs.com/lax-k8s/apps:v1 controller-uid=91e0c6c0-b00b-4d23-b694-dbcd7b53cf12
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/hello-29069423-484ps 0/1 Completed 0 65s 10.100.203.186 worker232 <none> <none>
pod/hello-29069424-4gx6j 0/1 Completed 0 5s 10.100.203.187 worker232 <none> <none>
[root@master231 cronjobs]#
[root@master231 cronjobs]#
[root@master231 cronjobs]# kubectl logs hello-29069423-484ps
Wed Apr 9 02:23:00 UTC 2025
violet linux96 Hello from the Kubernetes cluster ...
[root@master231 cronjobs]#
[root@master231 cronjobs]#
[root@master231 cronjobs]# kubectl logs hello-29069424-4gx6j
Wed Apr 9 02:24:00 UTC 2025
violet linux96 Hello from the Kubernetes cluster ...
[root@master231 cronjobs]#