Kubernetes 1.19.0——服务svc(1)
时间:2022-07-28
本文章向大家介绍Kubernetes 1.19.0——服务svc(1),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
[root@vms61 chap9-svc]# kubectl create deployment web1 --image=nginx --dry-run=client -o yaml > web1.yaml
[root@vms61 chap9-svc]# vi web1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web1
name: web1
spec:
replicas: 3
selector:
matchLabels:
app: web1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: web1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
status: {}
[root@vms61 chap9-svc]# kubectl apply -f web1.yaml
deployment.apps/web1 created
[root@vms61 chap9-svc]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web1-5bfb6d8dcc-jqrfl 1/1 Running 0 4s
web1-5bfb6d8dcc-nggqm 1/1 Running 0 4s
web1-5bfb6d8dcc-qrhtj 1/1 Running 0 4s
[root@vms61 chap9-svc]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web1-5bfb6d8dcc-jqrfl 1/1 Running 0 55s 10.244.196.36 vms62 <none> <none>
web1-5bfb6d8dcc-nggqm 1/1 Running 0 55s 10.244.196.37 vms62 <none> <none>
web1-5bfb6d8dcc-qrhtj 1/1 Running 0 55s 10.244.116.8 vms63 <none> <none>
每个pod的IP只能是集群内部可访问,集群里的pod——不管是哪个ns或在哪个节点,都是可以的
SVC定位的是app1:web1和app2:web2
注意这里如果指定了port为非80端口,curl的时候需要加上写明
[root@vms61 chap9-svc]# cat web1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
aa: bb
name: web1
spec:
replicas: 3
selector:
matchLabels:
app2: web2
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app1: web1
app2: web2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
status: {}
[root@vms61 chap9-svc]# kubectl apply -f web1.yaml
deployment.apps/web1 created
[root@vms61 chap9-svc]# kubectl expose --name=svc1 deployment web1 --port=80 --target-port=80
service/svc1 exposed
[root@vms61 chap9-svc]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc1 ClusterIP 10.107.89.230 <none> 80/TCP 7s
[root@vms61 chap9-svc]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web1-6464d54bd7-dt9qt 1/1 Running 0 70s 10.244.196.38 vms62 <none> <none>
web1-6464d54bd7-vtkwz 1/1 Running 0 70s 10.244.116.6 vms63 <none> <none>
web1-6464d54bd7-xfgth 1/1 Running 0 70s 10.244.196.40 vms62 <none> <none>
[root@vms61 chap9-svc]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
web1-6464d54bd7-dt9qt 1/1 Running 0 79s app1=web1,app2=web2,pod-template-hash=6464d54bd7
web1-6464d54bd7-vtkwz 1/1 Running 0 79s app1=web1,app2=web2,pod-template-hash=6464d54bd7
web1-6464d54bd7-xfgth 1/1 Running 0 79s app1=web1,app2=web2,pod-template-hash=6464d54bd7
[root@vms61 chap9-svc]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
svc1 ClusterIP 10.107.89.230 <none> 80/TCP 8m33s app2=web2
[root@vms61 chap9-svc]# kubectl describe svc svc1
Name: svc1
Namespace: chap9-svc
Labels: aa=bb
Annotations: <none>
Selector: app2=web2
Type: ClusterIP
IP: 10.107.89.230
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.116.6:80,10.244.196.38:80,10.244.196.40:80
Session Affinity: None
Events: <none>
[root@vms61 chap9-svc]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web1-6464d54bd7-dt9qt 1/1 Running 0 8m46s 10.244.196.38 vms62 <none> <none>
web1-6464d54bd7-vtkwz 1/1 Running 0 8m46s 10.244.116.6 vms63 <none> <none>
web1-6464d54bd7-xfgth 1/1 Running 0 8m46s 10.244.196.40 vms62 <none> <none>
那如果想使用app1: web1来定位呢?当然可以
通过如下命令即可,请自行测试
kubectl expose --name=svc1 deployment web1 --port=80 --target-port=80 --selector=app1=web1
[root@vms61 chap9-svc]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web1-6464d54bd7-dt9qt 1/1 Running 0 13m 10.244.196.38 vms62 <none> <none>
web1-6464d54bd7-vtkwz 1/1 Running 0 13m 10.244.116.6 vms63 <none> <none>
web1-6464d54bd7-xfgth 1/1 Running 0 13m 10.244.196.40 vms62 <none> <none>
[root@vms61 chap9-svc]# kubectl exec -it web1-6464d54bd7-dt9qt -- bash
root@web1-6464d54bd7-dt9qt:/# echo 11111 > /usr/share/nginx/html/index.html
root@web1-6464d54bd7-dt9qt:/# exit
exit
[root@vms61 chap9-svc]# kubectl exec -it web1-6464d54bd7-vtkwz -- bash
root@web1-6464d54bd7-vtkwz:/# echo 22222 > /usr/share/nginx/html/index.html
root@web1-6464d54bd7-vtkwz:/# exit
exit
[root@vms61 chap9-svc]# kubectl exec -it web1-6464d54bd7-xfgth -- bash
root@web1-6464d54bd7-xfgth:/# echo 33333 > /usr/share/nginx/html/index.html
root@web1-6464d54bd7-xfgth:/# exit
exit
[root@vms61 chap9-svc]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc1 ClusterIP 10.107.89.230 <none> 80/TCP 14m
[root@vms61 chap9-svc]# curl -s 10.107.89.230
33333
[root@vms61 chap9-svc]# curl -s 10.107.89.230
22222
[root@vms61 chap9-svc]# curl -s 10.107.89.230
11111
[root@vms61 chap9-svc]# curl -s 10.107.89.230
11111
[root@vms61 chap9-svc]# curl -s 10.107.89.230
33333
[root@vms61 chap9-svc]# curl -s 10.107.89.230
11111
[root@vms61 chap9-svc]# curl -s 10.107.89.230
33333
[root@vms61 chap9-svc]# curl -s 10.107.89.230
33333
[root@vms61 chap9-svc]# curl -s 10.107.89.230
33333
[root@vms61 chap9-svc]# curl -s 10.107.89.230
11111
[root@vms61 chap9-svc]# curl -s 10.107.89.230
22222
[root@vms61 chap9-svc]# curl -s 10.107.89.230
22222
如果我现在有一个服务svc1,找出此服务后端到底有多少个pod
根据selector这个下的标签来定位(不是labels)
[root@vms61 chap9-svc]# kubectl describe svc svc1
Name: svc1
Namespace: chap9-svc
Labels: aa=bb
Annotations: <none>
Selector: app2=web2
Type: ClusterIP
IP: 10.105.180.153
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.116.6:80,10.244.196.38:80,10.244.196.40:80
Session Affinity: None
Events: <none>
[root@vms61 chap9-svc]# kubectl get pods -l app2=web2
NAME READY STATUS RESTARTS AGE
web1-6464d54bd7-dt9qt 1/1 Running 0 27m
web1-6464d54bd7-vtkwz 1/1 Running 0 27m
web1-6464d54bd7-xfgth 1/1 Running 0 27m
- 如何设置dedecms自定义表单必填项?
- 如何用<dl>标签做表格而不用table标签
- Gulp使用指南
- Gulp Error: Cannot find module 'jshint/src/cli'
- 自学如何使用Python和Keras构建你自己专属的AlphaZero系统
- 用Visual Studio Code写Node.j
- 帝国CMS搜索页伪静态实现方法
- 5步搭建GO环境
- 你真的了解如何将 Nginx 配置为Web服务器吗
- 12个JavaScript技巧
- 梯度是如何计算的
- Java 机器学习库Smile实战(二)AdaBoost
- 如何用excel urldecode解码把url编码转为汉字?
- Scikit-learn实战之 SVM回归分析、密度估计、异常点检测
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【tensorflow2.0】训练模型的三种方法
- 用C++跟你聊聊“建造者模式”
- 【tensorflow2.0】使用TPU训练模型
- 用C++跟你聊聊“外观模式”
- 【tensorflow2.0】使用tensorflow-serving部署模型
- 用C++跟你聊聊“模板方法模式”
- 用C++跟你聊聊“原型模式” (复制/拷贝构造函数)
- 【numpy】生成图片格式的数据
- 【numpy】新版本中numpy(numpy>1.17.0)中的random模块
- 用C++跟你聊聊“代理模式”
- mybatis与spring整合步骤以及自己遇到的错误
- 用C++跟你聊聊“装饰者模式”
- 【python实现卷积神经网络】激活函数的实现(sigmoid、softmax、tanh、relu、leakyrelu、elu、selu、softplus)
- 【python实现卷积神经网络】损失函数的定义(均方误差损失、交叉熵损失)
- 【python实现卷积神经网络】优化器的实现(SGD、Nesterov、Adagrad、Adadelta、RMSprop、Adam)