k8s入门-资源文件实现(代码片段)

guardwhy guardwhy     2022-12-04     671

关键词:

1.1 idea安装k8s插件

1、idea插件官网地址:https://plugins.jetbrains.com/

2、kubernetes地址:https://plugins.jetbrains.com/plugin/10485-kubernetes/versions

2、离线安装k8s插件

特殊原因,在线安装有可能安装失败失败。下载idea对应版本的插件后,进行离线安装。

help->about->查看idea内部版本信息

下载对应的版本!!!

离线安装k8s插件,安装成功!!!

settings->plugins->Install Plugin from Disk->插件安装目录,安装完成后重启idea

1.2 idea配置SSH客户端

1、idea配置

settings->Tools->SSH Configurations->新建 

2、选择使用SSH客户端。

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

3、新建yml类型文件

idea默认没有yml文件类型,可以通过new->file->手工输入*.yml创建yml类型文件。

1.3 Remote Host

1、IDEA基本配置

Tools->Deployment->Configurations->配置Remote Host 

2、设置服务器名字: k8s-master01

3、测试连接!!!

4、使用Remote Host,将本工程中的文件上传k8s集群 。

1.4 NameSpace相关操作

1、查看自动生成模板信息内容

2、创建namespace01.yml文件

在文件中输入kres,根据模板快速生成yml文件信息。

apiVersion: v1
kind: Namespace
metadata:
  name: guardwhy

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

[root@k8s-master01 data]# ls
calico.yml  init.sh  k8s.1.17.5.tar  pod
[root@k8s-master01 data]# cd pod/
[root@k8s-master01 pod]# ls
namespace01.yml

# 1、创建namespace(guardwhy)
[root@k8s-master01 pod]# kubectl apply -f namespace01.yml 
namespace/guardwhy created
[root@k8s-master01 pod]# kubectl get ns
NAME              STATUS   AGE
default           Active   2d3h
guardwhy          Active   11s
kube-node-lease   Active   2d3h
kube-public       Active   2d3h
kube-system       Active   2d3h

# 2、删除namespace(guardwhy)
[root@k8s-master01 pod]# kubectl delete -f namespace01.yml 
namespace "guardwhy" deleted
[root@k8s-master01 pod]# kubectl get ns
NAME              STATUS   AGE
default           Active   2d3h
kube-node-lease   Active   2d3h
kube-public       Active   2d3h
kube-system       Active   2d3h
[root@k8s-master01 pod]# 

1.5 pod相关操作

1、在k8sdemo01工程创建tomcatpod.yml文件,在文件中输入kpod,根据模板快速生成yml文件信息。

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

2、镜像下载策略、重启策略

imagePullPolicy:

  • Always:总是拉取 pull。
  • IfNotPresent:如果本地有镜像,使用本地,如果本地没有镜像,下载镜像。
  • Never:只使用本地镜像,从不拉取。

restartPolicy:

  • Always:只要退出就重启。
  • OnFailure:失败退出时(exit code不为0)才重启。
  • Never:永远不重启。

3、运行pod

## 1、查看deployment控制器
[root@k8s-master01 pod]#  kubectl get deployment
No resources found in default namespace.

## 2.查看所有的pod
[root@k8s-master01 pod]#  kubectl get pod
No resources found in default namespace.

## 3.查看镜像
[root@k8s-master01 pod]# docker images
REPOSITORY                           TAG                        IMAGE ID       CREATED         SIZE
tomcat                               9.0.37-jdk8-openjdk-slim   d60b68827676   9 months ago    305MB
tomcat                               9.0.37-jdk8                9c7be7b021c3   9 months ago    531MB
calico/node                          v3.14.2                    780a7bc34ed2   11 months ago   262MB
calico/pod2daemon-flexvol            v3.14.2                    9dfa8f25b51c   11 months ago   22.8MB
calico/cni                           v3.14.2                    e6189009f081   11 months ago   119MB
calico/kube-controllers              v3.14.2                    4815e4106d26   11 months ago   52.8MB
k8s.gcr.io/kube-proxy                v1.17.5                    e13db435247d   14 months ago   116MB
k8s.gcr.io/kube-controller-manager   v1.17.5                    fe3d691efbf3   14 months ago   161MB
k8s.gcr.io/kube-apiserver            v1.17.5                    f640481f6db3   14 months ago   171MB
k8s.gcr.io/kube-scheduler            v1.17.5                    f648efaff966   14 months ago   94.4MB
k8s.gcr.io/coredns                   1.6.5                      70f311871ae1   20 months ago   41.6MB
k8s.gcr.io/etcd                      3.4.3-0                    303ce5db0e90   20 months ago   288MB
tomcat                               9.0.20-jre8-alpine         387f9d021d3a   2 years ago     108MB
k8s.gcr.io/pause                     3.1                        da86e6ba6ca1   3 years ago     742kB
[root@k8s-master01 pod]# ls
namespace01.yml  tomcatpod.yml

## 4.资源文件运行pod
[root@k8s-master01 pod]# kubectl apply -f tomcatpod.yml 
pod/tomcat-pod created
[root@k8s-master01 pod]# kubectl get pod
NAME         READY   STATUS    RESTARTS   AGE
tomcat-pod   1/1     Running   0          21s

## 5.查看pod的详细信息
[root@k8s-master01 pod]# kubectl get pod -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
tomcat-pod   1/1     Running   0          80s   10.81.85.212   k8s-node01   <none>           <none>
[root@k8s-master01 pod]# 

3、测试pod

curl 10.81.85.212:8080 

4、删除pod

[root@k8s-master01 pod]# kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
tomcat-pod   1/1     Running   0          15m
[root@k8s-master01 pod]# kubectl delete -f tomcatpod.yml 
pod "tomcat-pod" deleted
[root@k8s-master01 pod]# kubectl get pods
No resources found in default namespace.
[root@k8s-master01 pod]# 

注意:不会创建默认的资源管理器!!!

[root@k8s-master01 pod]# kubectl get deployment
No resources found in default namespace.
[root@k8s-master01 pod]# 

1.5 deployment相关操作

1、在k8sdemo01工程创建tomcatdeployment.yml文件,在文件中输入kdep,根据模板快速生成yml文件信息。

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

2、matchLabels

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

3、运行deployment

[root@k8s-master01 pod]# ls
namespace01.yml  tomcatdeployment.yml  tomcatpod.yml

## 1.获取deployment控制器
[root@k8s-master01 pod]# kubectl get deployment
No resources found in default namespace.

## 2、运行deployment控制器
[root@k8s-master01 pod]# kubectl apply -f tomcatdeployment.yml 
deployment.apps/tomcat-deploy created
[root@k8s-master01 pod]# kubectl get deployment
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
tomcat-deploy   3/3     3            3           31s
[root@k8s-master01 pod]# 

4、Deployment控制器

控制器名称具体作用
Deployment声明式更新控制器,用于发布无状态应用。
ReplicaSet副本集控制器,用于对Pod进行副本规模 扩大或剪裁。
StatefulSet有状态副本集,用于发布有状态应用。
DaemonSet在k8s集群每一个Node上运行一个副本, 用于发布监控或日志收集类等应用。
Job运行一次性作业任务。
CronJob运行周期性作业任务。

Deployment控制器基本介绍:

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

5、删除Deployment

[root@k8s-master01 pod]# kubectl get deployment
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
tomcat-deploy   3/3     3            3           19m

## 1.删除控制器
[root@k8s-master01 pod]# kubectl delete -f tomcatdeployment.yml 
deployment.apps "tomcat-deploy" deleted

[root@k8s-master01 pod]# kubectl get deployment
No resources found in default namespace.
[root@k8s-master01 pod]# 

1.6 service相关操作

1、在k8sdemo01工程创建tomcatservice.yml文件,在文件中输入kser,根据模板快速生成yml文件信息。

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

---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
spec:
  selector:
    # 标签选择必须是template.labels.app
    app: tomcat-pod
  ports:
    # 对集群内其他服务暴露端口号
    - port: 8888
      targetPort: 8080
      nodePort: 30088
  type: NodePort

2、service的selector

service.spec.selector.app选择的内容仍然是template.label.app内容,而不是deployment控制器的label内容。

3、Service类型

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

4、Service参数

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

5、运行service

[root@k8s-master01 pod]# ls
namespace01.yml  tomcatdeployment.yml  tomcatpod.yml  tomcatservice.yml
## 1.运行运行service
[root@k8s-master01 pod]# kubectl apply -f tomcatservice.yml 
deployment.apps/tomcat-deploy created
service/tomcat-svc created

## 2.获取service服务
[root@k8s-master01 pod]# kubectl get svc
NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes    ClusterIP   10.1.0.1       <none>        443/TCP          2d6h
tomcat-svc    NodePort    10.1.156.209   <none>        8888:30088/TCP   29s
tomcat9-svc   NodePort    10.1.215.214   <none>        8888:32502/TCP   25h
[root@k8s-master01 pod]# 

测试访问

curl 10.1.156.209:8888

访问集群外端口

http://8.134.125.116:30088

k8s资源管理之pod(代码片段)

文章目录导读:k8s的资源管理Pod为什么需要Pod?pod结构pod实现原理pod操作使用配置文件形式k8s镜像拉取策略Pod配置文件速查表滚动更新pod删除Pod静态Pod什么是StaticPod最常见的StaticPod配置文件方式HTTP方式导读:k8s的资... 查看详情

k8s教程----零基础快速入门(代码片段)

k8s详解教程----零基础快速入门前言:Kubernetes(k8s)作为云原生的核心平台,吸引了越来越多的运维、开发、测试以及其他技术员去了解学习。随着行业越来越内卷,k8s已经被广泛使用,作为一名运维人员&... 查看详情

k8s快速入门:从部署到实战(代码片段)

k8s快速入门介绍容器化部署随着Docker技术的流行,对项目的容器化部署方式越来越流行,容器化部署的优点如下:可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等运行应用程序所需要的资源都被容器包... 查看详情

helmv3入门(代码片段)

Helm应用包管理器为什么需要Helm?K8S上的应用对象,都是由特定的资源描述组成,包括deployment、service等。都保存各自文件中或者集中写到一个配置文件。然后kubectlapply–f部署。如果应用只由一个或几个这样的服务组成,上面部... 查看详情

kubernetes(k8s)之容器资源限制(代码片段)

k8s容器资源限制资源限制的实现资源的两种限制类型资源类型单位演示环境Memory内存限制CPU限制LimitRange为namespace设置资源限制ResourceQuota为namespace设置资源配额资源限制的实现Kubernetes对资源的限制实际上是通过cgroup来控制的࿰... 查看详情

singularity入门之资源限制(代码片段)

在Singularity中如果需要限制容器的资源,也可以通过Linux的cgroup来实现。Singularity对资源的限制是通过一个.toml文件来定义的,Singularity提供了一个样例配置文件/etc/singularity/cgroups/cgroups.toml,后面做资源限制的时候可以... 查看详情

❤️不会写k8s资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧❤️(代码片段)

❤️不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧❤️文章目录❤️不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧❤️一、熟悉下K8S常用命令参数以及资源管理1.K8S集群常用命... 查看详情

k8s通过yaml文件创建资源(代码片段)

创建podcd~vipod-demo.yaml#内容如下apiVersion:v1kind:Podmetadata:name:pod-demonamespace:defaultlabels:app:myapptier:frontendspec:containers:-name:myappimage:ikubernetes/myapp:v1-name:busyboximage:busybox:lat 查看详情

从入门到上手:什么是k8s持久卷?(代码片段)

本文是介绍Kubernetes的基本概念的系列文章之一,在第一篇文章中,我们简单介绍了持久卷(PersistentVolumes)。在本文中,我们将学习如何设置数据持久性,并将编写Kubernetes脚本以将我们的Pod连接到持久卷。在此示例中,将使用Az... 查看详情

kubernetes(k8s)之编写资源清单(代码片段)

资源清单一级目录什么叫资源清单如何创建资源编写资源清单模板(格式)资源清单参数说明自主式Pod资源清单一级目录什么叫资源清单k8s中所有的内容都抽象为资源,资源实例化之后,叫做对象。在k8s中,... 查看详情

k8s创建资源(代码片段)

一,两种创建资源的方法1.基于命令的方式:简单直观快捷,上手快。适合临时测试或实验。2.基于配置清单的方式:配置文件描述了What,即应用最终要达到的状态。配置文件提供了创建资源的模板,能够重复部署。可以像管理... 查看详情

k8s:通过helmify实现将yaml文件转化为helmcharts(代码片段)

写在前面分享一个Yaml资源文件转HelmCharts包的小工具helmify博文内容涉及:helmify工具安装,简单使用YAML静态文件转化为HELMcharts包从kustomize输出转化为Helm理解不足小伙伴帮忙指正博文涉及helmify我心匪石,不可转也。我... 查看详情

nginx配置静态资源缓存,同时配合k8s的svc(coredns)实现负载均衡(代码片段)

最近发现以上线的tomcatweb服务静态资源加载比较慢,而且每次都会重新从服务端拉取,这里肯定是有缺陷并且需要改进的.然后决定使用nginx解决,通过配置静态资源缓存实现动静分离,同时发现k8s的dns解析果然简单粗暴,非常实用,直接... 查看详情

k8s创建资源(代码片段)

两种创建资源的方法基于命令的方式:简单直观快捷,上手快。适合临时测试或实验。基于配置文件的方式:配置文件描述了What,即应用最终要达到的状态。配置文件提供了创建资源的模板,能够重复部署。可以像管理代码一... 查看详情

linux12k8s-->04资源管理和yaml文件详解(代码片段)

文章目录资源管理和YAML文件一、资源管理介绍二、YAML文件详解1、YAML文件概述2、YAML文件书写格式1、YAML介绍2、YAML基本语法3、YAML组成1、YAML支持以下几种数据类型:2、小提示:4、yaml详解5、快速编写yaml文件1、方式一&#x... 查看详情

k8s常用命令(代码片段)

kubectl相关命令1、基本命令命令作用create创建资源edit编辑资源get获取资源patch更新(修改)资源delete删除资源explain展示资源文档2、运行/调试命令命令作用run在集群中运行指定镜像expose暴露资源为servicedescribe展示资源内部... 查看详情

k8s常用命令(代码片段)

kubectl相关命令1、基本命令命令作用create创建资源edit编辑资源get获取资源patch更新(修改)资源delete删除资源explain展示资源文档2、运行/调试命令命令作用run在集群中运行指定镜像expose暴露资源为servicedescribe展示资源内部... 查看详情

容器运行时与k8s概述(代码片段)

...一个进程,一个特殊的进程,是通过Namespace实现资源(网络、文件系统等)隔离,通过Cgroups实现资源(CPU、内存)限制,让我们使用起来就感觉像在操作虚拟机一样,但其和虚拟机有本质上的... 查看详情