16-k8s使用
1. k8s环境
1.1. 安装
根据说明安装
1.2. 部署dashboard
kubectl apply -f kubernetes-dashboard.yaml
kubectl: 客户端程序与远程k8s server交互
kubectl proxy: 把远程k8s server端口代理到本地端口
1.3. 部署ingress controller
kubectl apply -f ingress-nginx-controller.yaml
1.4. 验证 Kubernetes 集群状态
- kubectl cluster-info
- kubectl get nodes
- kubectl get nodes –show-labels
- 给节点打标签:kubectl label node docker-desktop disktype=ssd
- 查询满足标签的节点:kubectl get nodes -l disktype=ssd
- 删除标签:kubectl label node docker-desktop disktype
2. k8s基本架构
Node: 安装docker的宿主机,提供容器。
Master:管理集群的机器,安装k8s的核心模块。也可以与Node部署在同一台宿主机上。
kubelet:和Master、本地docker交互。
flannel:容器网络的第三方实现,给容器提供虚拟网络。
etcd:类似reddis的缓存系统。
k8s目的:通过多个Node节点,获得更多容器。
3. 👍k8s资源
3.1. 类型
- namespaces
- 类似java中的package
- 可以把不同资源放在不同namespace里,不同namespace里面可以有同名资源
- ReplicaSet
- 维持Pod实例数
- Pods
- 以包含一个或多个容器,内部容器的逻辑宿主机
- k8s里管理的最小资源
- Deployment
- 负责Pod的自动创建
- Service
- 类似微服务的“服务”概念,为外界提供一定的业务能力
- 部署在Pod中,一个服务可以有多个Pod
- Ingress
- 网关,把不同域名/url路由到对应的服务
- k8s对外统一提供Ingress的入口
- configmap
- 集群中提供配置信息的地方
- key-value结构
- secrets
- 涉及安全的隐私数据,有不同类别
- serviceaccounts
- 给容器里的软件用的账户,容器和k8s server交互时用到
- DaemonSet
- 常驻在Node上
- 例:fluentd,常驻的Node上收集日志
3.2. Pod
Pod是Kubernetes调度的最小单元 👍
多个容器在一个Pod中共享网络和文件系统
- PID命名空间:Pod中不同的应用程序可以看到其他应用程序的进程ID
- network命名空间:Pod中多个容器处于同一个网络命名空间,因此能够访问的IP和端口范围都是相同的。也可以通过localhost相互访问
- IPC命名空间:Pod中的多个容器共享Inner-process Communication命名空间,因此可以通过SystemVIPC或POSIX进行进程间通信
- UTS命名空间:Pod中的多个容器共享同一个主机名
- Volumes:Pod中各个容器可以共享在Pod中定义分存储卷(Volume)
restartPolicy字段
- Always:只要退出就重启
- OnFailure:失败退出时(exit code不为0)才重启
- 也可能是正常的退出
- Never:永远不重启
3.2.1. pod管理命令
- 创建pod
kubectl run
kubectl run myspittr --image spittr:1.0-SNAPSHOT
- 类似docker run
- 查看pod
kubectl get pods
kubectl logs -f myspittr
- 在pod中执行命令
kubectl exec
kubectl exec myspittr -- ls /run/secrets/kubernetes.io/serviceaccount
,在myspittr中执行--
后的命令
- 删除pod
kubectl delete pod <pod name>
3.2.2. 如何将pod或service的端口快速映射到本机端口(调试用)
port-forward: ``kubectl port-forward
host_ip:container_ip` - 和
docker -p
一样,左边宿主机右边容器端口 - 可以直接映射pod,但更推荐映射service
- 和
映射pod:
kubectl port-forward pod/myspittr 8081:8080
映射service:
kubectl port-forward service/demo 8081:80
3.2.3. Pod、Container与Node之间的关系
3.3.👍 Service
不希望让别人直接访问pod,k8s可能会对pod做更改,ip会改变。但cluster-ip或服务名不会改变。
3.3.1. 命令
创建:kubectl expose
kubectl expose pod <serveice name> --port <port>
查看
- kubectl svc
3.3.2. 如何访问Service
- expose
- port-forward
- curl容器
3.4. 👍Ingress
- 只能路由到service,不能路由到pod
- service有cluseter-ip,不会改变,而pod的ip可能会改变
3.4.1. 命令
- 创建:kubectl create ingress myspittr –class=nginx –rule=www.license.com/*=myspittr:8080
- 删除:kubectl delete ingress myspittr
ingress网关默认端口80
3.5. 命令行快捷创建deployment、service、ingress
kubectl create deployment myspittr–image=spittr:1.0-SNAPSHOT –port=8080
kubectl expose deployment myspittr 把上面的这个pod的8080端口暴露为myspittr服务
kubectl create ingress myspittr–class=nginx–rule=www.license.com/*=myspittr:8080
删除:
- kubectl delete ingress myspittr
- kubectl delete service myspittr
- kubectl delete deployment myspittr
3.6. Deployment
- 重启:kubectl rollout restart deployment/spittr
- kubectl rollout restart deployment –selector=app=spittr
- 更新镜像重部署:kubectl set image deployment/spittr spittr=spittr:1.0
- 扩容:kubectl scale deployment spittr –replicas 2
- 自动伸缩:kubectl autoscale deployment spittr –min=10 –max=15 –cpu-percent=80 👍
- k8s可以依据CPU使用率动态决定实例数量的选择
- 记得删除: kubectl delete horizontalpodautoscalers.autoscaling spittr
- 查看历史版本:kubectl rollout history deployment/spittr
- 回滚到前一个版本:kubectl rollout undo deployment/spittr
4. k8s常用命令
- kubectl get secrets/pods/all [ -n namespace]
- kubectl get secret mysecret-o yaml
- kubectl delete pod pod_name [ -n namespace]
- kubectl apply -f [json文件或yaml文件-路径]
- kubectl delete -f [json文件或yaml文件-路径]
- kubectl describe secret mysecret
- kubectl logs secret1-pod
- 标题: 16-k8s使用
- 作者: Charlie
- 创建于 : 2023-12-28 18:12:00
- 更新于 : 2024-07-05 12:55:04
- 链接: https://chillcharlie357.github.io/posts/9aa54120/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。