文章目录
- 1 搭建本地测试环境
- 1.1 安装 docker和 Colima
- 1.2 安装 minikube
- 1.3 启动minikube
- 1.4 安装 kubectl
- 1.5 注册 docker hub镜像仓库
- 2 k8s核心资源概念
- 2.1 Pod
- 2.2 Deployment
- 2.3 Service
- 2.4 Ingress
- 参考资料
1 搭建本地测试环境
本文以 mac os为例
1.1 安装 docker和 Colima
brew install docker
brew install colima
1.2 安装 minikube
- minikube用来管理本地k8s集群
brew install minikube
- 常用命令
minikube stop #不会删除任何数据,只是停止 VM 和 k8s 集群。minikube delete #删除所有 minikube 启动后的数据。minikube ip #查看集群和 docker enginer 运行的 IP 地址。minikube pause #暂停当前的资源和 k8s 集群minikube status #查看当前集群状态
1.3 启动minikube
minikube start --vm-driver docker --container-runtime=docker
1.4 安装 kubectl
brew install kubectl
1.5 注册 docker hub镜像仓库
- 在页面注册后,使用账号密码登录,登录前需要先启动 docker
docker login
- 如果登录遇到这样的报错:
Post "http://ipc/registry/credstore-updated": dial unix backend.sock: connect: no such file or directory
则修改~/.docker/config.json
文件,删除下面这一行,然后重新使用登录命令即可。
"credsStore": "desktop"
2 k8s核心资源概念
2.1 Pod
- pod是k8s中创建和管理的、最小的可部署的计算单元。
- 服务运行在容器当中, container (容器) 的本质是
进程
,而 pod 是管理这一组进程的资源
。一个 pod可以管理多个 container。
- 创建一个 pod的示例配置文件
# nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-pod
spec:containers:- name: nginx-containerimage: nginx
- 通过 kubectl相关命令创建
kubectl apply -f nginx.yaml
kubectl get pods
kubectl port-forward nginx-pod 4000:80
kubectl exec -it nginx-pod /bin/bash
kubectl describe pod nginx-pod
2.2 Deployment
- Deployment是 k8s中帮助我们管理 pod的
资源
,比如自动扩容和升级版本。 - 创建一个 Deployment的示例配置文件。
template
标签下的内容是用来定义 pod 资源的,我们需要加上metadata.labels
来和上面的selector.matchLabels
对应起来。来表明 pod 是被 deployment 管理,不用在template 里面加上metadata.name
是因为 deployment 会主动为我们创建 pod 的唯一name
。
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: hellok8s-deployment
spec:replicas: 1selector:matchLabels:app: hellok8stemplate:metadata:labels:app: hellok8sspec:containers:- image: xxxx/hellok8s:v1name: hellok8s-container
- 当手动删除一个 pod资源后,deployment 会自动创建一个新的 pod。
- 回滚操作
kubectl rollout undo deployment hellok8s-deployment
kubectl rollout history deployment hellok8s-deployment
kubectl rollout undo deployment/hellok8s-deployment --to-revision=2
2.3 Service
- Service 为 pod 提供一个稳定的 Endpoint。Service 位于 pod 的
前面
,负责接收请求并将它们传递给它后面的所有pod。一旦服务中的 Pod 集合发生更改,Endpoints 就会被更新,请求的重定向自然也会导向最新的 pod。 - 创建一个 Deployment的示例配置文件。
# service-hellok8s-clusterip.yaml
apiVersion: v1
kind: Service
metadata:name: service-hellok8s-clusterip
spec:type: ClusterIPselector:app: hellok8sports:- port: 3000targetPort: 3000
- 在集群中,可以通过访问 service 的 IP 来访问下面的 pods
kubectl get service
- 在集群外部访问 pod的 IP
apiVersion: v1
kind: Service
metadata:name: service-hellok8s-nodeport
spec:type: NodePortselector:app: hellok8sports:- port: 3000nodePort: 30000
- 如果 minikube使用的参数是
--driver=docker
,需要使用以下命令。
minikube service service-hellok8s-nodeport --url
2.4 Ingress
- Ingress 可以“简单理解”为服务的网关 Gateway,它是所有流量的入口,经过配置的路由规则,将流量重定向到后端的服务。
- minikube开启 Ingress-Controller功能
minikube addons enable ingress
kubectl delete deployment,service --all
参考资料
- 【1】 https://k8s-tutorials.pages.dev/