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