盛世宏图 发表于 2023-5-4 07:31:40

kubernetes入门

一.导言

随着容器技术的发展,软件界对容器管理的需求越来越迫切,于是出现了一些kubernetes(即k8s),docker swarm 等容器管理软件。同时k8s等服务编排软件也让微服务变得可行,快速扩容缩容,自动处理网络配置等特性也让k8s如火如荼。
k8s能做什么?

[*]服务发现和负载均衡,使用dns或者ip对外暴露容器服务,并提供负载均衡
[*]存储管理,多种存储选择
[*]拟态扩容缩容,根据需求扩容,缩容,并且k8s会尽力达到desired state
[*]自动装箱,比如配置每个容器能使用的CPU和RAM资源,k8s将容器分配到合适的节点以最大化利用系统资源
[*]自动处理故障,当容器失效时,能快速处理,并且不会对客户端有影响
[*]配置和秘钥管理
二.k8s架构及相关概念

https://img2023.cnblogs.com/blog/431015/202305/431015-20230501103513235-724530607.png
control plane:控制台
kube-apiserver: k8s的核心api服务,一般需要做横向扩展
etcd: 提供一致性和高可用的的键值存储,k8s用来存储集群数据。etcd是一款用go语言编写的分布式kv存储,基于raft算法,能提供更稳定的高负载稳定读写能力。
kube-scheduler: 为未分配节点的pod寻找合适的节点
kube-controller-manager: 包括以下controller

[*]  node controller: 监视节点下线
[*]  job-controller: 监视Job 运行状况
[*]  EndpointSlice controller: 即端点列表控制器,为Service 和 pod 提供连接
cloud-controller-manager: 云服务控制管理
node:节点,对应物理机或者虚拟机
kubelet: 运行在节点中的agent,确保容器运行在pod中
kube-proxy: 运行在节点中的网络代理,为Servcie提供支持
https://img2023.cnblogs.com/blog/431015/202305/431015-20230501110226705-588782013.png
pod: k8s 抽象出来的的管理单元,包括一个或者多个容器,共享存储,网络,端口等资源
volume: 存储单元抽象
container:容器,比如docker
https://img2023.cnblogs.com/blog/431015/202305/431015-20230501111643164-419131820.png
Deployment:部署,描述部署的容器,复制等信息,一个典型的Deployment如下
    apiVersion: apps/v1 (版本)
        kind: Deployment (对象类型)
        metadata: (元数据)
          name: nginx-deployment (name, UIDs)
        spec: (目标状态)
          selector:
          matchLabels:
              app: nginx
          replicas: 2 # tells deployment to run 2 pods matching the template
          template:
          metadata:
              labels: (labels and selector)
                app: nginx
          spec:
              containers:
              - name: nginx
                image: nginx:1.14.2
                ports:
                - containerPort: 80Service:基于pod创建对外或者对内网络服务
三.构建无状态服务

无状态服务:服务不依赖自身的状态,实例的状态数据可以维护在内存中。
构建步骤如下:
   0.笔者这里使用minikube进行测试,先启动minikube   
minikube start
minikube dashboard # 启动后台管理界面https://img2023.cnblogs.com/blog/431015/202305/431015-20230503092820988-209120431.png
1.执行部署
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
    app.kubernetes.io/name: load-balancer-example
name: hello-world
spec:
replicas: 5
selector:
    matchLabels:
      app.kubernetes.io/name: load-balancer-example
template:
    metadata:
      labels:
      app.kubernetes.io/name: load-balancer-example
    spec:
      containers:
      - image: gcr.io/google-samples/node-hello:1.0
      name: hello-world
      ports:
      - containerPort: 8080kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml2.查看部署信息
kubectl get deployments hello-world
kubectl describe deployments hello-world

NAME          READY   UP-TO-DATE   AVAILABLE   AGE
hello-world   5/5   5            5         12m3.查看副本集
这里我们创建了五个副本
kubectl get replicasets
kubectl describe replicasets

NAME                         DESIRED   CURRENT   READY   AGE
hello-world-644f58f5f4       5         5         5       12m4.创建Service暴露部署
kubectl expose deployment hello-world --type=LoadBalancer --name=my-service # LoadBalancer表示使用负载均衡的方式5.查看Service
kubectl get services my-service

NAME         TYPE         CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
my-service   LoadBalancer   10.102.184.247   <pending>   8080:31755/TCP   3s6.查看Service详细信息
kubectl describe services my-serviceName:                     my-serviceNamespace:                defaultLabels:                   app.kubernetes.io/name=load-balancer-exampleAnnotations:            Selector:               app.kubernetes.io/name=load-balancer-exampleType:                     LoadBalancerIP Family Policy:         SingleStackIP Families:            IPv4IP:                     10.102.184.247IPs:                      10.102.184.247Port:                     8080/TCPTargetPort:               8080/TCPNodePort:                   31755/TCPEndpoints:                10.244.0.87:8080,10.244.0.88:8080,10.244.0.89:8080 + 2 more... # 端点Session Affinity:         NoneExternal Traffic Policy:ClusterEvents:
页: [1]
查看完整版本: kubernetes入门