K8S部署服务以及服务的暴露
基础命令:1. 创建应用:kubectl create deployment nginx-test --image=nginx# 到远程仓库pull一个nginx的docker镜像# 然后回创建一个名字为nginx-test的deployment# 同时回创建一个pod2. 查看pod:kubectl get pods [-n namespace]# 查看对应命名空间的 pod,默认命名空间是de
·
基础命令:
1. 创建应用:
kubectl create deployment nginx-test --image=nginx
# 到远程仓库pull一个nginx的docker镜像
# 然后回创建一个名字为nginx-test的deployment
# 同时回创建一个pod
2. 查看pod:
kubectl get pods [-n namespace] [-A]
# 查看对应命名空间的 pod,默认命名空间是default
# -A 查看所有的pods
3. 查看deployment:
kubectl get deployment [-n namespace]
# 查看对应命名空间的 deployment,默认是default
4. 查看service:
kubectl get service [-n namespace]
# 查看对应命名空间的service
查看某个命名空间下的所有信息:
kubectl get all -n namespace
5. 暴露服务:
kubectl expose deployment nginx-test --port=80 [--type=NodePort]
# 暴露一个服务,K8S集群之间容器通信的端口是80,
# --type=NodePort,表示在集群部署的主机(所有主机)上开启一个随机的端口(默认30000~32767),暴露给外部使用, 可以通过 --nodePort指定一个固定的端口
# 执行这条命令之后才会产生一个 service
# 可以可以使用yaml文件的形式,创建服务之后直接暴露
6. 删除pod:
kubectl delete pod podName [-n namespace]
# 删除对应命名空间下名字为 podName的pod
7. 删除service:
kubectl delete service serviceName [-n namespace]
# 删除对应命名空间下名字为 serviceName的service
8. 删除:deployment
kubectl delete deployment deploymentName [-n namespace]
# 删除对应命名空间下名字为 deploymentName的deployment
# 删除某个命名空间下的所有内容
kubectl delete all all -n namespace
# 删除命名空间
kubectl delete namespace name
9. 空部署测试:
kubectl create deployment 应用名 --image=镜像名 --dry-run=client [-o yaml > deploy.yaml ]
# 不会真正的运行,会产生一个yaml文件
10. 通过yaml文件部署应用:
kubectl apply -f deploy.yaml
# apply 如果存在则更新,如果不存在则创建
# 推荐使用这种方式部署服务,自定义程度比较高
# create deployment默认是到配置的docker仓库pull镜像
# 如果使用本地镜像,需要修改deploy.yaml文件中的内容,如下
containers:
- name: myweb
image: myweb-image
imagePullPolicy: Never # 表示不到远程仓库拉取镜像
11. 编辑某个service
kubectl edit service kubernetes-dashboard -n kubernetes-dashboard
K8S集群中的三种端口:
1. nodePort:
集群提供给外部访问使用的端口。
2. port:
集群内部各个服务(容器)之间访问的端口,不提供给外部使用。
3. targetPort
容器自己的端口,这个端口一般和容器内部部署的应用端口相同,例如mysql 3306,nginx 80等等
K8S集群暴露服务的几种方式:
按照个人理解做了简单的描述,
https://blog.csdn.net/qq_21187515/article/details/112363072
感觉这个大佬写的很详细了
1. NodePort:
在集群的每一台机器上都开放一个端口,外部请求访问这个端口,然后转发个对应的pod
2. LoadBalancer
一般是需要云厂商提供的ip
3. Ingress:
可以理解成一个路由,访问对应的url时,ingress会将url解析成ip+端口
ingress-nginx暴露服务:
以暴露一个nginx服务为例子,
kubectl create deployment nginx --image=nginx # 创建一个deploy
kubectl expose deployment nginx --port=80 # 暴露服务(创建一个service),这个端口在之后的rule.yaml中会用到,不需要指定--type=NodePort
安装ingress-nginx:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml
# 补充一下,修改一下deploy.yaml这个文件里面的镜像,
# 320行添加 hostNetwork: true,否则无法访问
# 323行,改为阿里云的镜像,不然可能会安装失败
# registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:版本号
kubectl apply -f deploy.yaml
编写一个简单的路由规则:
ingress-nginx-rule.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: k8s-ingress # 自定义
spec:
rules:
- host: www.sda1-hacker.com # 自定义路由
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: nginx # service名字 kubectl get service可以查看
port:
number: 80 # service端口 -- 集群内部的端口,在 expose命令中指明的port=80,kubectl get service可以查看
创建一个ingress规则:
kubectl apply -f ingress-nginx-rule.yaml
kubectl get ingress # 获取ingress信息
kubectl delete ingress name # 删除对应的ingress
# 在hosts配置一下映射 192.168.157.138 www.sda1-hacker.com
通过ip+端口号无法访问
ok了,
扩容和缩容,可以通过副本数来控制,执行 kubectl apply -f xxx.yml即可
关于新加入worknode的配置,要使用DaemonSet控制器,看到了大佬们写的内容,还有其它一些控制器,等用到了再做笔记
# K8S 五种控制器类型
# https://blog.csdn.net/weixin_45691464/article/details/106326605
更多推荐
已为社区贡献2条内容
所有评论(0)