网站建设公司厂,网易免费企业邮箱入口,游戏建模师工资一般多少,搜索引擎网站排行榜API资源对象Deployment
最小的资源是pod#xff0c;deployment是多个pod的集合#xff08;多个副本实现高可用、负载均衡等#xff09;。 使用yaml文件来配置、部署资源对象。
Deployment YAML示例#xff1a; vi ng-deploy.yaml
apiVersion: apps/v1
kind: Deployment…API资源对象Deployment
最小的资源是poddeployment是多个pod的集合多个副本实现高可用、负载均衡等。 使用yaml文件来配置、部署资源对象。
Deployment YAML示例 vi ng-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: myngname: ng-deploy
spec:replicas: 2 ##副本数selector:matchLabels:app: myngtemplate:metadata:labels:app: myngspec:containers:- name: myngimage: nginx:1.23.2ports:- name: myng-portcontainerPort: 80获取pod所在节点kubectl get po -o wide或者kebectl describe po xxxx。
API资源对象Service
作用对外提供访问端口。 Service简称(svc) YAML示例 vi ng-svc.yaml
apiVersion: v1
kind: Service
metadata:name: ngx-svc
spec:selector:app: myngports:- protocol: TCPport: 8080 ##service的porttargetPort: 80 ##pod的port三种Service 类型 1ClusterIP 该方式为默认类型即不定义type字段时如上面service的示例就是该类型。
spec:selector:app: myngtype: ClusterIPports:- protocol: TCPport: 8080 ##service的porttargetPort: 80 ##pod的port2NodePort 如果想直接通过k8s节点的IP直接访问到service对应的资源可以使用NodePortNodeport对应的端口范围:30000-32767
spec:selector:app: myngtype: NodePortports:- protocol: TCPport: 8080 ##service的porttargetPort: 80 ##pod的portnodePort: 30009 ##可以自定义也可以不定义它会自动获取一个端口3LoadBlancer 这种方式需要配合公有云资源比如阿里云、亚马逊云来实现这里需要一个公网IP作为入口然后来负载均衡所有的Pod。
spec:selector:app: myngtype: LoadBlancerports:- protocol: TCPport: 8080 ##service的porttargetPort: 80 ##pod的portAPI资源对象DaemonSet
类似deployment。deamonset作用是在集群的每个节点上运行且只运行一个pod。 Daemonset和Deployment的差异很小除了Kind不一样还需要去掉replica配置 vi ds-demo.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:labels:app: ds-demoname: ds-demo
spec:selector:matchLabels:app: ds-demotemplate:metadata:labels:app: ds-demospec:containers:- name: ds-demoimage: nginx:1.23.2ports:- name: mysql-portcontainerPort: 80只在两个node节点上启动了pod没有在master上启动这是因为默认master有限制。
kubectl describe node k8s01 |grep -i taint
Taints: node-role.kubernetes.io/control-plane:NoSchedule说明Taint叫做污点如果某一个节点上有污点则不会被调度运行pod。 为了解决此问题 改一下YAML配置 vi ds-demo.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:labels:app: ds-demoname: ds-demo
spec:selector:matchLabels:app: ds-demotemplate:metadata:labels:app: ds-demospec:tolerations:- key: node-role.kubernetes.io/control-planeeffect: NoSchedulecontainers:- name: ds-demoimage: nginx:1.23.2ports:- name: mysql-portcontainerPort: 80API资源对象StatefulSet
pod根据有误数据存储分为有状态、无状态。无状态适合不会产生重要数据的应用比如nginx、tomcat等。有状态会产生重要数据比如MySQL、redis等。 deployment、daemonset适合做无状态statefulset适合做有状态。
statefulset涉及到数据持久化用到storageclass资源对象。下面实验先创建基于NFS的storageclass。
新主机配置NFS服务
cat /etc/exports
/data/nfs 192.168.56.0/24(rw,sync,no_root_squash)三台k8s主机安装nfs
yum install -y nfs-utils
然后挂载nfs目录
showmount -e 192.168.56.124Sts示例 vi redis-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-stsspec:serviceName: redis-svc ##这里要有一个serviceNameSts必须和service关联volumeClaimTemplates:- metadata:name: redis-pvcspec:storageClassName: nfs-clientaccessModes:- ReadWriteManyresources:requests:storage: 500Mireplicas: 2selector:matchLabels:app: redis-ststemplate:metadata:labels:app: redis-stsspec:containers:- image: redis:6.2name: redisports:- containerPort: 6379volumeMounts:- name: redis-pvcmountPath: /datavi redis-svc.yaml
apiVersion: v1
kind: Service
metadata:name: redis-svcspec:selector:app: redis-stsports:- port: 6379protocol: TCPtargetPort: 6379kubectl apply -f redis-sts.yaml -f redis-svc.yamlAPI资源对象Job
作用一次性运行后就推出的pod。比如备份一次数据库这样的单次任务。
先来生成一个YAML文件
kubectl create job job-demo --imagebusybox --dry-runclient -o yaml job-demo.yamlvi job-demo.yaml ##编辑此配置
apiVersion: batch/v1
kind: Job
metadata:name: job-demo
spec:template: ##模板基于此模板来创建pod它用来定义pod的属性比如containerspec:restartPolicy: OnFailure ##定义Pod运行失败时的策略可以是OnFailure和Never其中OnFailure表示失败的话需要重启容器Never表示失败的话不重启容器而是重新生成一个新的Podcontainers:- image: busyboxname: job-democommand: [/bin/echo]args: [hellow, world]几个特殊字段
activeDeadlineSeconds设置 Pod 运行的超时时间。backoffLimit设置 Pod 的失败重试次数。completionsJob 完成需要运行多少个 Pod默认是 1 个。parallelism它与 completions 相关表示允许并发运行的 Pod 数量避免过多占用资源。 vi myjob.yaml
apiVersion: batch/v1
kind: Job
metadata:name: sleep-jobspec:activeDeadlineSeconds: 15 #15s就超时backoffLimit: 2 #失败重试2次就放弃completions: 4 #要运行4个pod才算完成parallelism: 2 #允许并发运行2个podtemplate:spec:restartPolicy: Nevercontainers:- image: busyboxname: echo-jobimagePullPolicy: IfNotPresentcommand:- sh- -c- sleep 10; echo doneAPI资源对象CronJob
CronJob简称cj是一种周期运行的Pod比如有些任务需要每天执行一次就可以使用CronJob。
先来生成一个YAML文件
kubectl create cj cj-demo --imagebusybox --schedule --dry-runclient -o yaml cj-demo.yamlvi job-demo.yaml ##编辑此配置
apiVersion: batch/v1
kind: CronJob
metadata:name: cj-demospec:schedule: */1 * * * * #核心配置jobTemplate:spec:template:spec:restartPolicy: OnFailurecontainers:- image: busyboxname: cj-demoimagePullPolicy: IfNotPresentcommand: [/bin/echo]args: [hello, world]API资源对象Endpoint
简称ep该资源是和service一一对应的也就是说每个service都会对应一个endpoint。ep可以理解成service后端对应的资源。
有时候k8s里的pod需要访问外部资源比如访问外部mysql非k8s内的pod就可以定义一个对外资源的endpoint然后再定义一个service就可以让k8s里的其他pod访问了将mysql内化成k8s pod。
kubectl get svc
kubectl get epvim testep.yaml
apiVersion: v1
kind: Endpoints
metadata:name: external-mysql
subsets:- addresses:- ip: 192.168.222.128ports:- port: 3306---
apiVersion: v1
kind: Service ##注意该service里并不需要定义selector只要Service name和Endpoint name保持一致即可
metadata:name: external-mysql
spec:ports:- port: 3306API资源对象ConfigMap
简称cm用来存储配置信息比如服务端口、运行参数、文件路径等。
vi mycm.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mycmdata:DATABASE: dbUSER: wpPASSWORD: 123456ROOT_PASSWORD: 123456创建cm
kubectl apply -f mycn.yaml查看
kubectl get cm
kubectl describe cm mycm在其他pod里引用configmap vi testpod.yaml
apiVersion: v1
kind: Pod
metadata:name: testpodlabels:app: testpodspec:containers:- image: mariadb:10name: mariaimagePullPolicy: IfNotPresentports:- containerPort: 3306envFrom: ##将cm里的字段全部导入该pod- prefix: MARIADB_ ##将导入的字段名前面自动加上前缀例如MARIADB_DATABASE MARIADB_USERconfigMapRef: ##定义哪个cmname: mycm测试
kubectl exec -it testpod -- bashecho $MARIADB_USERAPI资源对象Secret
secret和cm的结构和用法类似secret对象细分出很多类比如
访问私有镜像仓库的认证信息身份识别的凭证信息HTTPS通信的证书和私钥一般的机密信息格式由用户自行解释
YAML示例 vi mysecret.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecretdata:user: YW1pbmc ## echo -n rocky_k8s|base64passwd: bGludXgxMjM ## echo -n linux123|base64查看
kubectl apply -f mysecret.yaml
kubectl get secret
kubectl describe secret mysecret在其他pod中调用secret vi testpod2.yaml
apiVersion: v1
kind: Pod
metadata:name: testpod2spec:containers:- image: busyboxname: busyimagePullPolicy: IfNotPresentcommand: [/bin/sleep, 300]env:- name: USERNAMEvalueFrom:secretKeyRef:name: mysecretkey: user- name: PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: passwd