Kubernetes 实战之资源文件
1. idea配置k8s插件
#插件官网,查找对应版本k8s插件
https://plugins.jetbrains.com/
#kubernetes地址:
https://plugins.jetbrains.com/plugin/10485-kubernetes
2. 使用ssh客户端
就类似使用xshell工具
#配置ssh连接
settings->Tools->SSH Configurations->新建
#使用ssh连接
Tools->Start SSH session->选择我们刚刚配置的ssh客户端名称
#新建yml类型文件,见下图示例
settings->Edtior->File and Code Template->file->+(新建)
3. Remote Host
目标:将idea工程中的文件上传k8s集群master节点
类似于xftp工具
Tools->Deployment->Configurations->配置Remote Host
下面进行实际的练习
4. NameSpace
-
创建NameSpace
安装k8s插件后,会自动生成对应的Live Template模板,创建的时候可以通过快捷指令生成yml信息
settings->Editor->Live Template->Kubernetes->查看自动生成的模板信息内容
文件名: qiang_namespace_test.yml
在文件中输入kres,根据模板快速生成yml文件信息
apiVersion: v1 kind: Namespace metadata: name: qiang
通过idea的Remote Host快速将yml文件上传k8s集群进行测试
kubectl apply -f /data/namespace/qiang_namespace_test.yml
-
删除NameSpace
kubectl delete -f /data/namespace/qiang_namespace_test.yml
5. pod
-
创建pod
文件名: qiang_pod_tomcat.yml
在文件中输入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 /data/pod/qiang_pod_tomcat.yml
-
测试pod
curl ip:8080
-
删除Pod
kubectl delete -f /data/pod/qiang_pod_tomcat.yml
6. Deployment
文件名: qiang_deployment_tomcat.yml
-
创建deployment
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-deployment labels: app: tomcat-deployment spec: replicas: 1 template: metadata: name: tomcat-deployment labels: app: tomcat-deployment spec: containers: - name: tomcat-deployment image: tomcat:9.0.20-jre8-alpine imagePullPolicy: IfNotPresent restartPolicy: Always selector: matchLabels: app: tomcat-deployment
总结: 在Deployment中必须写matchLables 在定义模板的时候必须定义labels, 因为Deployment.spec.selector是必须字段,而他又必须和 template.labels对应
-
运行deployment
kubectl apply -f /data/deployment/qiang_deployment_tomcat.yml
-
控制器类型
控制器名称 作用 Deployment 声明式更新控制器,用于发布无状态应用 ReplicaSet 副本集控制器,用于对Pod进行副本规模 扩大或剪裁 StatefulSet 有状态副本集,用于发布有状态应用 DaemonSet 在k8s集群每一个Node上运行一个副本, 用于发布监控或日志收集类等应用 Job 运行一次性作业任务 CronJob 运行周期性作业任务 -
Deployment控制器介绍
具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能
Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,否则还是建议使用Deployment而不直接使用ReplicaSet
-
删除deployment
kubectl delete -f /data/deployment/qiang_deployment_tomcat.yml
7. Service
文件名: qiang_service_tomcat.yml
-
创建service
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-deployment labels: app: tomcat-deployment spec: replicas: 1 template: metadata: name: tomcat-deploymenta labels: app: tomcat-pod spec: containers: - name: tomcat-deployment image: tomcat:9.0.20-jre8-alpine imagePullPolicy: IfNotPresent ports: - containerPort: 8080 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
-
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 kubectl delete -f tomcatservice.yml