Kubernetes系列之资源文件

前言

通过我前面的文章,我们了解了如何通过命令行的方式创建一系列的资源,而企业中,包括k8s官方推荐我们使用资源文件方式去创建资源,由于通过linux的vi 、vim命令方式编写资源文件不太方便,本文通过我们的开发工具idea来编写。

idea安装k8s插件

离线安装

idea插件官网地址
https://plugins.jetbrains.com/
kubernetes地址:
https://plugins.jetbrains.com/plugin/10485-kubernetes

查找对应自己idea版本的k8s插件信息

help->about->查看idea内部版本信息 一定要注意版本信息,否则无法安装

k8s插件

因国外网站网速较慢,在线安装有安装失败的危险。推荐大家下载idea对应版本的插件后,进行离线安装 settings->plugins->Install Plugin from Disk->插件安装目录 安装完成后重启idea开发工具

在线安装

image.png
安装完后,重启idea
之后我们就可以看到多了kubernetes模板,通过 kcm 、kdep、kpod、kres、kser等快捷键创建yml模板
image.png

idea配置SSH客户端

目标:在idea中打开终端操作k8s集群master节点。

idea配置

Settings -> Build, Execution, Deployment ->Deployment->SFTP->新建

image.png

使用SSH客户端

Tools->Start SSH session->选择我们刚刚配置的ssh客户端名称

image.pngimage.png
image.pngimage.png

idea配置新增yml文件格式

由于idea新建文件时,没有yml格式的文件,因此需要在Settings -> Editor -> File and Code Templates下新增yml格式
image.pngimage.png

Namespace

创建NameSpace

操作指南: settings->Editor->Live Template->Kubernetes->查看自动生成的模板信息内容
通过kres快捷创建

apiVersion: v1
kind: Namespace
metadata:
  name: BCST

通过idea的Remote Host快速将yml文件上传k8s集群进行测试
image.png
image.png

删除NameSpace

kubectl delete -f testnamespace.yml

Pod

创建pod

通过kpod快捷键创建

apiVersion: v1
kind: Pod
metadata:
  name: tomcat9
  labels:
    app: tomcat9
spec:
  containers:
    - name: tomcat9
      image: tomcat:9.0.20-jre8-alpine
      imagePullPolicy: IfNotPresent
  restartPolicy: Always

镜像下载策略、重启策略

imagePullPolicy:
   Always:总是拉取 pull
   IfNotPresent:如果本地有镜像,使用本地,如果本地没有镜像,下载镜像。
   Never:只使用本地镜像,从不拉取
restartPolicy:
   Always:只要退出就重启。
   OnFailure:失败退出时(exit code不为0)才重启
   Never:永远不重启

运行pod

kubectl apply -f tomcatpod.yml

image.png
注:通过资源文件创建的pod,只会创建pod,不会额外创建一个控制器deployment控制器,而通过命令行方式会创建

测试pod

curl 10.81.166.135:8080

image.png

删除pod

kubectl delete -f tomcatpod.yml

image.png

Deployment

创建deployment

通过kdep快捷键创建

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat-deployment
spec:
  replicas: 3
  template:
    metadata:
      name: tomcat-deployment
      labels:
        app: tomcat-deploy
    spec:
      containers:
        - name: tomcat-deployment
          image: tomcat:9.0.20-jre8-alpine
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
  selector:
    matchLabels:
      app: tomcat-deploy

matchLabels

总结: 在Deployment中必须写matchLables 在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和 template.labels对应

image.png

运行deployment

 kubectl apply -f tomcatdeployment.yml

image.png

删除Deployment

kubectl delete -f tomcatdeployment.yml

控制器类型

image.png

Deployment控制器介绍

具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能。 Deployment包含 ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,否则还是建议使用 Deployment而不直接使用ReplicaSet 。

Service

创建service

通过kser快捷键创建

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
spec:
  selector:
    app: tomcat-deploy
  ports:
    - port: 8888
      targetPort: 8080
      nodePort: 30088
      protocol: TCP # 支持  "SCTP", "TCP", "UDP"
  type: NodePort

注:service是在deploy上层,所以需先创建deployment 即tomcat-deploy,配置文件和创建deployment一样

service的selector

请各位小伙伴注意: service.spec.selector.app选择的内容仍然是template.label.app内容。而不是我们 deployment控制器的label内容

Service类型

ClusterIP:默认,分配一个集群内部可以访问的虚拟IP
NodePort:在每个Node上分配一个端口作为外部访问入口
LoadBalancer:工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack
ExternalName:表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务
进行通信

Service参数

port :访问service使用的端口
targetPort :Pod中容器端口
NodePort: 通过Node实现外网用户访问k8s集群内service(30000-32767)

运行service

kubectl apply -f tomcatservice.yml

删除service

kubectl delete -f tomcatservice.yml

image.png
image.png
image.png
注:如果通过集群内应用访问service使用的端口拒绝连接,原因是对应的deployment没有启动
curl: (7) Failed connect to 10.1.49.104:8888; 拒绝连接
image.png
解决办法:运行deployment即可
image.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值