k8s:基础内容和部署简单nginx

这篇具有很好参考价值的文章主要介绍了k8s:基础内容和部署简单nginx。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、yaml文件详解

1.yaml常见语法

1) apiVersion

kubectl api-versions
  • v1:Kubernetes API的稳定版本,包含很多核心对象:pod、service等。

2) kind

kind指定这个资源对象的类型,如pod、deployment、statefulset、job、cronjob、Endpoints service

  • Endpoints :可以把外部的链接到k8s系统中
  • service:部署一个内部的IP,其他deployment可以链接
  • deployment:部署一个pod,内部只能链接service,无法互相连接。

3) metadata

metadata常用的配置项有name:显示的名字,namespace:归属的命名空间。

4) spec

一个嵌套字典与列表的配置项,也是主要的配置项,支持的子项非常多,根据资源对象的不同,子项会有不同的配置。
如一个pod的spec配置:

apiVersion: v1  	#必选 版本号
kind: Pod       	#必选
metadata:			#必选 元数据
  name: nginx		#必选 Pod名称
  labels:			#自定义标签
    app: nginx		#自定义标签名称
spec:				#必选 Pod中容器的详细定义
  containers:		#必选 Pod中容器列表,一个pod里会有多个容器
    - name:nginx 	#必选 容器名称
      image:nginx 	#必选 容器的镜像名称
      imagePullPolicy:IfNotPresent # [Always | Never | IfNotPresent] 获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像 
  	  ports: #需要暴露的端口库号列表
  	  - containerPort:80 # 容器需要监听的端口号
 restartPolicy: Always # [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod 

如一个service的spec配置:

apiVersion: v1  	#必选 版本号
kind: Service       #必选
metadata:			#必选 元数据
  name: service-hello		#必选 Pod名称
  labels:			#自定义标签
    name: service-hello #自定义标签名称
spec:				#必选 Pod中容器的详细定义
  type:	NodePort	#这里代表是NodePort类型的,另外还有ingress,LoadBalancer 
  ports: 
  - port:80 #这里的端口和clusterIP(kubectl describe service service-hello中的IP的port)对应,即在集群中所有机器上curl clusterIP:80可访问发布的应用服务
  	targetPort:8080 #端口一定要和contrainer暴露出来的端口对应,nodejs暴露出来的端口是8080
  	protocol: TCP
  	nodePort: 31111 #所有的节点都会开发此端口30000~32767,此端口供外部调用
  selector:
  	run:hello  #这里选择器一定要选择容器的标签

5) nodeName

nodeName用于将Pod调度到指定的Node名称上。

# SchedulePolicy-nodeName.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: busybox
  name: busyboxnn
  namespace: default
spec:
  nodeName: k8s-node1
  containers:
  - image: busybox
    name: bs
    command:
    - "ping"
    - "baidu.com"

6) nodeSelector

nodeSelector用于将Pod调度到匹配Label的Node上,先给规划node用途,然后打标签,例如将两台node划分给不同的团队使用:

$ kubectl label nodes k8s-node1 team=a
$ kubectl label nodes k8s-node2 team=b

7) taint(污点)与tolerations(容忍)

  • 污点:节点独占,例如具有特殊硬件设备的节点,如GPU
    设置污点的命令:kubectl taint node [node name] key=value[effect]
    去掉污点:kubectl taint node k8s-node1 abc=123:NoSchedule
    其中[effect]值为:
    NoSchedule :一定不能被调度。
    PreferNoSchedule:尽量不要调度。
    NoExecute:不仅不会调度,还会驱逐Node上已有的Pod。
  • 再创建pod只有声明了容忍污点(tolerations),才允许被调度到abc=123污点节点上,如果不配置容忍污点,则永远不会调度到k8s-node1
  • master节点默认是打了污点标记,不调度的,去掉污点标记
#添加 尽量不调度 PreferNoSchedule 
kubectl taint nodes k8s-master node-role.kubernetes.io/master:PreferNoSchedule
#去除污点NoSchedule,最后一个"-"代表删除
kubectl taint nodes k8s-master node-role.kubernetes.io/master:NoSchedule-
# SchedulePolicy-tolerations.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: busybox
  name: busybox3
  namespace: default
spec:
  tolerations:
  - key: "abc"
    operator: "Equal"
    value: "123"
    effect: "NoSchedule"
  containers:
  - image: busybox
    name: bs
    command:
    - "ping"
    - "baidu.com"

2.port详解

  • port:是k8s集群内部访问service的端口,即通过clusterIP:port可以访问到某个service
  • nodePort:是外部访问k8s集群中service的端口,通过nodeIP:nodePort可以从外部访问到某个service。
  • targetPort:是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器
  • containerPort:是pod的内部端口,targetPort映射到containerPort。

3.Label与Selector

1)Label是k8s系列中另外一个核心概念。是一组绑定到k8s资源对象上的key/value对。同一个对象的labels属性的key必须唯一,label可以附加到各种资源对象上,如Node,Pod,Service,RC等。通过给指定的资源对象捆绑一个或多个不同的label来实现对维度的资源分组管理功能,以便于灵活,方便地进行资源分配、调度、配置、部署等管理工作

  • 版本标签:“release” : “stable” , “release” : “canary”…
  • 环境标签:“environment” : “dev” , “environment” : “production”
  • 架构标签:“tier” : “frontend” , “tier” : “backend” , “tier” : “middleware”
  • 分区标签:“partition” : “customerA” , “partition” : “customerB”…
  • 质量管控标签:“track” : “daily” , “track” : “weekly”

2)Selector
label selector是k8s核心分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象。符合这个标签的pod会做为这个service的backend。文章来源地址https://www.toymoban.com/news/detail-419397.html

apiVersion: v1
kind: Service
metadata:
  name: hello
  labels:
    app: hello
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: hello

4.kubectl create与apply区别

  1. kubectl create:可创建新资源,因此如果重复运行该命令,则会报错,因为资源名称在名称空间中是唯一的。
  2. kubectl apply:将配置应用于资源,如果资源不在,那么它将被创建。如果资源在,做更

到了这里,关于k8s:基础内容和部署简单nginx的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s 部署 Nginx 并代理到tomcat

    [root@master nginx]# kubectl get nodes -o wide   [root@master nginx]# kubectl get svc NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE kubernetes      ClusterIP   10.96.0.1       none        443/TCP          25h tomcatservice   NodePort    10.102.227.68   none        8080:30010/TCP  

    2024年01月22日
    浏览(26)
  • 持续集成部署-K8s 简单使用

    这里将 HTTPD 服务映射到 Kubernetes 集群的 8080 端口上,直接在Master节点上操作即可。 创建一个名为 httpd-deployment.yaml 的 YAML 文件,内容如下:

    2024年02月12日
    浏览(55)
  • EFK简单部署收集K8S日志

    安装ES kibana K8S部署

    2024年04月27日
    浏览(23)
  • K8S二进制部署详解,一文教会你部署高可用K8S集群

    Pod网段: 10.0.0.0/16 Service网段: 10.255.0.0/16 集群角色 ip 主机名 安装组件 控制节点 10.10.0.10 master01 apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx 控制节点 10.10.0.11 master02 apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx 控制节点 10.10.0.12 master03 apiser

    2024年04月28日
    浏览(32)
  • k8s部署nginx自动更新域名及解除后端依赖

    在k8s中使用nginx作为后端接口反向代理,大概配置如下: 其中 api-server-svc 是后端服务的service 这个配置会有两个问题: 要求 api-server-svc 这个service要先创建,否则nginx启动时会因为无法解析 api-server-svc 而启动失败 nginx服役期间,如果后端服务重启,svc ip改变了,代理会失败,

    2024年02月04日
    浏览(29)
  • K8S(1.28)--部署ingress-nginx(1.9.1)

    原文网址:K8S(1.28)--部署ingress-nginx(1.9.1)-CSDN博客 本文介绍K8S部署ingress-nginx的方法。 本文使用的K8S和ingress-nginx都是最新的版本。 官网地址 https://kubernetes.github.io/ingress-nginx/deploy/ Ingress里Nginx的代理流程: 1.确定版本 首先确定版本:https://github.com/kubernetes/ingress-nginx 我K8S是1.2

    2024年02月20日
    浏览(32)
  • k8s之ingress-nginx-controller与metallb部署

    在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,Kubernetes 目前提供了以下几种方案: NodePort LoadBalancer Ingress 为了解决外部访问k8s内服务及负载均衡问题,这里介绍如何安装ingress-nginx-cont

    2023年04月08日
    浏览(28)
  • k8s实战案例之部署Nginx+Tomcat+NFS实现动静分离

    根据业务的不同,我们可以导入官方基础镜像,在官方基础镜像的基础上自定义需要用的工具和环境,然后构建成自定义出自定义基础镜像,后续再基于自定义基础镜像,来构建不同服务的基础镜像,最后基于服务的自定义基础镜像构建出对应业务镜像;最后将这些镜像上传

    2024年02月07日
    浏览(36)
  • K8S应用笔记 —— 部署Dolphinscheduler及简单应用(一)

    Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中

    2024年02月07日
    浏览(30)
  • Kubernetes(k8s)实战:深入详解Volume,详解k8s文件同步存储

    Volume官网:https://kubernetes.io/docs/concepts/storage/volumes/ On-disk files in a Container are ephemeral, which presents some problems for non-trivial applications when running in Containers. First, when a Container crashes, kubelet will restart it, but the files will be lost - the Container starts with a clean state. Second, when running Containers to

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包