k8s入门-资源文件实现

Posted guardwhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s入门-资源文件实现相关的知识,希望对你有一定的参考价值。

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入门-资源文件实现的主要内容,如果未能解决你的问题,请参考以下文章

k8s入门-资源文件实现

从零开始入门 K8s| K8s 的应用编排与管理

从零开始入门 K8s| K8s 的应用编排与管理

❤️不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧❤️

k8s入门-命令行实现

k8s入门-命令行实现