k8s集群:linode k8s集群,一主两从。
测试以busybox 使用wget 访问nginxindex为例。
Kubectl 连接k8s集群
将配置文件信息导入到本地kubectl
export KUBECONFIG=/path/to/your/kubeconfig.yaml
测试1 . 相同命名空间中pod间的访问
默认命名空间中创建busybox
kubectl run -it --image busybox:1.28.4 dns-test /bin/sh
# 下次进入
kubectl exec -it dns-test /bin/sh
# 查看pod
Kubectl get pod
创建 nginx-deploy,编辑nginx-deploy.yaml
apiVersion: apps/v1 # deployment api 版本
kind: Deployment # 资源类型为 deployment
metadata: # 元信息
labels: # 标签
app: nginx-deploy # 具体的 key: value 配置形式
name: nginx-deploy # deployment 的名字
namespace: default # 所在的命名空间
spec:
replicas: 1 # 期望副本数
revisionHistoryLimit: 10 # 进行滚动更新后,保留的历史版本数
selector: # 选择器,用于找到匹配的 RS
matchLabels: # 按照标签匹配
app: nginx-deploy # 匹配的标签key/value
strategy: # 更新策略
rollingUpdate: # 滚动更新配置
maxSurge: 25% # 进行滚动更新时,更新的个数最多可以超过期望副本数的个数/比例
maxUnavailable: 25% # 进行滚动更新时,最大不可用比例更新比例,表示在所有副本数中,最多可以有多少个不更新成功
type: RollingUpdate # 更新类型,采用滚动更新
template: # pod 模板
metadata: # pod 的元信息
labels: # pod 的标签
app: nginx-deploy
spec: # pod 期望信息
containers: # pod 的容器
- image: nginx:1.9.1 # 镜像
imagePullPolicy: IfNotPresent # 拉取策略
name: nginx # 容器名称
restartPolicy: Always # 重启策略
terminationGracePeriodSeconds: 30 # 删除操作最多宽限多长时间
# 创建deploy
kubectl create -f nginx-deploy.yaml
# 查看pod 详情
Kubectl get pod -o wide
# 进入 busybox
kubectl exec -it dns-test /bin/sh
由于没有curl命令,为方便使用 wget 直接访问nginx
此时通过pod ip 可以直接下载到index.Html文件,但pod 生命周期很短pod,写死ip之后更改会很麻烦。
创建service
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
labels:
app: nginx-svc
spec:
ports:
- name: http # service 端口配置的名称
protocol: TCP # 端口绑定的协议,支持 TCP、UDP、SCTP,默认为 TCP
port: 80 # service 自己的端口
targetPort: 80 # 目标 pod 的端口
- name: https
port: 443
protocol: TCP
targetPort: 443
selector: # 选中当前 service 匹配哪些 pod,对哪些 pod 的东西流量进行代理
app: nginx-deploy
上面deploy配置文件中可以看到deploy 里pod 模板的label 为app=nginx-deploy,此时service配置文件中配置selector app=nginx-deploy可匹配到此deploy下的pod。
创建service,查看svc(service 缩写),查看ep (endpoint缩写)。
此时在busybox 中直接使用svc 名称即可访问pod服务。
测试2 . 不相同命名空间中pod间的访问
以上是相同NS中pod间的访问,不同NS间的pod访问在其服务名后加上NS即可。
创建 NS 为nginx的 deploy,只需修改namespace 为nginx即可,为对比方便将一些名称信息加-ng标识,在窗前其他命名空间的deploy或pod之类的需提前创建后NS。
# 创建 名为 nginx 的 NS
kubectl create ns nginx
nginx命名空间下的deploy配置文件
apiVersion: apps/v1 # deployment api 版本
kind: Deployment # 资源类型为 deployment
metadata: # 元信息
labels: # 标签
app: nginx-deploy-ns # 具体的 key: value 配置形式
name: nginx-deploy-ns # deployment 的名字
namespace: nginx# 所在的命名空间
spec:
replicas: 1 # 期望副本数
revisionHistoryLimit: 10 # 进行滚动更新后,保留的历史版本数
selector: # 选择器,用于找到匹配的 RS
matchLabels: # 按照标签匹配
app: nginx-deploy -ng# 匹配的标签key/value
strategy: # 更新策略
rollingUpdate: # 滚动更新配置
maxSurge: 25% # 进行滚动更新时,更新的个数最多可以超过期望副本数的个数/比例
maxUnavailable: 25% # 进行滚动更新时,最大不可用比例更新比例,表示在所有副本数中,最多可以有多少个不更新成功
type: RollingUpdate # 更新类型,采用滚动更新
template: # pod 模板
metadata: # pod 的元信息
labels: # pod 的标签
app: nginx-deploy-ng
spec: # pod 期望信息
containers: # pod 的容器
- image: nginx:1.9.1 # 镜像
imagePullPolicy: IfNotPresent # 拉取策略
name: nginx # 容器名称
restartPolicy: Always # 重启策略
terminationGracePeriodSeconds: 30 # 删除操作最多宽限多长时间
此时kubectl get pod 并未看到新创建的pod,因为kubectl 默认使用default命名空间。
在命令后加 -n NS即可。
创建 nginx 命名空间内的svc。
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: nginx
labels:
app: nginx-svc
spec:
ports:
- name: http # service 端口配置的名称
protocol: TCP # 端口绑定的协议,支持 TCP、UDP、SCTP,默认为 TCP
port: 80 # service 自己的端口
targetPort: 80 # 目标 pod 的端口
- name: https
port: 443
protocol: TCP
targetPort: 443
selector: # 选中当前 service 匹配哪些 pod,对哪些 pod 的东西流量进行代理
app: nginx-deploy-ns
之后在busybox中使用wget 请求nginx的index页面,发现直接使用svc名称不行,在其名称后加上".nginx"可以正常请求到。此时同一node下相同命名空间与不同命名空间的东西流量已打通。