简介 docker出现之后使用容器来部署程序的数量大大增加,容器数量越来越多,架构也越来越复杂,如何管理和编排容器就成了一个非常大的问题和挑战
k8s就是为了管理和编排容器而出现的引擎,用于容器的编排管理和扩展
核心组件 节点node :一个节点就是一个服务器或者虚拟机
pod :k8s的最小调度单元,一个或多个容器的组合,pod为其提供了一个共享环境,一般只开一个容器
Service :将一组pod封装成一个服务,应用程序通过service来获取ip访问pod,有点类似于注册中心
Ingress :管理集群外部访问内部服务的入口的,通过ingress来访问内部service
ConfigMap :相当于配置中心,比如数据库配置这样的东西放到里面
Secret :将敏感信息封装起来,会对信息base编码
volume :将持久化存储的资源挂载到磁盘或者远程存储服务上
Deployment :对pod更高的一层抽象
StatefulSet :对有状态的应用程序的高层抽象,比如数据库
架构 master-worker架构,master负责管理,worker负责工作
kubelet负责管理和维护pod
kube-proxy负责为pod提供网络代理和负载均衡
master组件
api server相当于网关,所有请求都先经过api server再继续处理
搭建环境 minikube是一个轻量级的k8s实现,可在本地计算机创建虚拟机,并部署仅包含一个节点的简单集群
kubectl命令行工具与k8s进行交互
在线环境:https://killercoda.com/playgrounds/scenario/kubernetes
我是在wsl里搭配minikube,先启动docker-desktop
然后在wsl里输入
1 2 curl -LO <https: sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
常用命令 kubectl get显示查询出的何种资源
1 2 3 woodq@WoodQ:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready control-plane 8 m51s v1.32 .0
运行一个pod
1 2 3 4 5 woodq@WoodQ:~$ kubectl run nginx --image=nginx pod/nginx created woodq@WoodQ:~$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx 1 /1 Running 0 25 s
创建一个deployment
1 2 3 4 5 woodq@WoodQ:~$ kubectl create deployment nginx-deployment --image=nginx deployment.apps/nginx-deployment created woodq@WoodQ:~$ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 1 /1 1 1 10 s
查看replicaset,pod的副本
1 2 3 ➜ ~ kubectl get replicaset NAME DESIRED CURRENT READY AGE nginx-deployment-6 cfb98644c 1 1 1 4 m51s
查看日志
进入交互式容器
1 ➜ ~ kubectl exec -it nginx -- /bin/bash
删除命令
1 2 ➜ ~ kubectl delete deployment.apps/nginx-deployment deployment.apps "nginx-deployment" deleted
用yaml命令创建资源
1 2 ➜ ~ kubectl create -f nginx-deployment.yaml deployment.apps/nginx-deployment created
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 GNU nano 7.2 apiVersion: apps/v1 nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80
通过文件创造服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ➜ ~ kubectl create -f nginx-deployment.yaml deployment.apps/nginx-deployment created ➜ ~ kubectl expose deployment nginx-deployment service/nginx-deployment exposed ➜ ~ kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx 1 /1 Running 0 40 m pod/nginx-deployment-55 d67f7b54-p6t6h 1 /1 Running 0 7 s pod/nginx-deployment-55 d67f7b54-skks6 1 /1 Running 0 7 s pod/nginx-deployment-55 d67f7b54-tqw4f 1 /1 Running 0 7 s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96 .0 .1 <none> 443 /TCP 50 m service/nginx-deployment ClusterIP 10.106 .168 .9 <none> 80 /TCP 5 s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-deployment 3 /3 3 3 7 s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-deployment-55 d67f7b54 3 3 3 7 s
详细查看内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ➜ ~ kubectl describe service nginx-deployment Name: nginx-deployment Namespace: default Labels: <none> Annotations: <none> Selector: app=nginx Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: 10.106 .168 .9 IPs: 10.106 .168 .9 Port: <unset> 80 /TCP TargetPort: 80 /TCP Endpoints: 10.244 .0 .10 :80 ,10.244 .0 .11 :80 ,10.244 .0 .12 :80 Session Affinity: None Events: <none>