K8s快速部署
一、 环境准备:MiniKube+Docker:
最近开始尝试学习和了解k8s,写这篇文章的目的是进行一个记录,
在探索中学习。欢迎各位大佬前来参观和交流。
1. 安装Docker:
2. 安装MiniKube:
Minikube 是本地 Kubernetes,专注于让 Kubernetes 易于学习和开发。官方文档:[Minikube官方安装文档]
二、准备:
创建yaml文件:
vi deployment.yaml
配置内容:
apiVersion: apps/v1
kind: Deployment # 配置类型
metadata:
name: getway-server # 要部署的项目名
labels:
app: getway-app # 项目标签
spec: # 规格参数
# replicas: 2 # 表示有两个 docker-demo 的Pod
selector:
matchLabels:
app: getway-app
template:
metadata:
labels:
app: getway-app
spec:
containers:
- name: getway # 容器名
# image: getway:v1.0 # 镜像名:tag # 本地仓库
image: registry.cn-chengdu.aliyuncs.com/xx/xx:getway-v1.0 # 远程仓库
imagePullPolicy: IfNotPresent #Never只使用本地镜像,Always 每次都下载镜像,IfNotPresent 优先使用本地没有再去下载
ports:
- containerPort: 3010 # 容器端口
---
apiVersion: v1
kind: Service # 配置类型
metadata:
name: getway-service # 服务的名称
# namespace: demo # 命名空间 kubectl create namespace demo
spec: # 规格参数
ports:
- port: 3010 # 集群内部访问Service端口号
protocol: TCP
# nodePort: 30001 # 集群外部访问Service端口号
targetPort: 3010 # Pod端口号
type: LoadBalancer # 四种类型:LoadBalance、ExternalName、NodePort、ClusterIP
selector:
app: getway-app # 被Server 管理的Pod名称
k8s部署使用的镜像可以是本地镜像,或者使用镜像仓库远程拉取。
- 使用本地镜像:打包好镜像后,需要将镜像再推送到Minikube的Docker注册表;(Minikube是单机版的k8s,如果集群不推荐使用本地镜像这种方式,因为需要保证每个节点都要有这个镜像,操作不方便)
- 使用远程仓库:比如阿里云镜像仓库。远程镜像仓库又分为公有镜像和私有镜像。如果使用私有镜像还需要在k8s集群当中配置ca证书。使用公有镜像则不需要。
以下便是使用,本地镜像和远程公有镜像的两种方式的操作
1. 使用本地镜像:
先将目标镜像保存到本地
docker save [REPOSITORY]:[TAG] > xx.tar
Minikube的Docker注册表(可以理解为k8s内部的Docker)
eval $(minikube docker-env)
载入镜像到k8s内部的docker
docker load < xx.tar
yaml文件中关于本地镜像的配置
containers:
- name: getway # 容器名
image: getway:v1.0 # 镜像名:tag # 本地仓库
#image: registry.cn-chengdu.aliyuncs.com/xx/xx:getway-v1.0 # 远程仓库
imagePullPolicy: Never #Never只使用本地镜像,Always 每次都下载镜像,IfNotPresent 优先使用本地没有再去下载
ports:
- containerPort: 3010 # 容器端口
2. 使用使用镜像仓库:
yaml中关于远程仓库镜像的配置
containers:
- name: getway # 容器名
# image: getway:v1.0 # 镜像名:tag # 本地仓库
image: registry.cn-chengdu.aliyuncs.com/xx/xx:getway-v1.0 # 远程仓库
imagePullPolicy: IfNotPresent #Never只使用本地镜像,Always 每次都下载镜像,IfNotPresent 优先使用本地没有再去下载
ports:
- containerPort: 3010 # 容器端口
三、启动:
执行配置文件
kubectl apply -f vi deployment.yaml
查看Pod的运行情况
kubectl get pod -o wide
或者使用Minikube自带的dashboard,执行命令
minikube dashboard
四、测试:
- 查看所有的Service
kubectl get svc
2. 临时对外开放API
minikube service getway-service --url
命令执行后,k8s会临时随机开放一个端口号,给外部访问。使用以下的URL便可以进行一波测试。
五、暴露服务的几种方式:
k8s对外暴露服务的几种方式:
1. ClusterIp:
集群内部的私有ip,在集群内部访问服务非常方便,是kuberentes集群默认的方式,集群外部则是无法访问的。
2. NodePort:
要想让外部能够直接访问service,需要将service type修改为 nodePort,指定nodePort,将service监听端口映射到node节点。
(nodePort端口范围:30000-32767)
spec: # 规格参数
ports:
- port: 3010 # 集群内部访问Service端口号
protocol: TCP
nodePort: 30001 # 集群外部访问Service端口号
targetPort: 3010 # Pod端口号
type: NodePort # 四种类型:LoadBalance、ExternalName、NodePort、ClusterIP
selector:
app: getway-app # 被Server 管理的Pod名称
3. LoadBalance:
ports:
- port: 3010 #集群内部访问Service端口号
protocol: TCP
targetPort: 3010 # Pod端口号
type: LoadBalancer # 四种类型:LoadBalance、ExternalName、NodePort、ClusterIP
在上面测试过程中,查看所有的Services,可以看到getway-service的 EXTERNAL-IP处于状态,接着执行以下命令。
minikube tunnel
此时dashborad查看Service,已经将外部访问需要的IP:Port暴露出来
使用PostMan进行测试: