kubernetes入门

打印 上一主题 下一主题

主题 536|帖子 536|积分 1608

一.导言

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

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


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提供支持

pod: k8s 抽象出来的的管理单元,包括一个或者多个容器,共享存储,网络,端口等资源
volume: 存储单元抽象
container:容器,比如docker

Deployment:部署,描述部署的容器,复制等信息,一个典型的Deployment如下
  1.     apiVersion: apps/v1 (版本)
  2.         kind: Deployment (对象类型)
  3.         metadata: (元数据)
  4.           name: nginx-deployment (name, UIDs)
  5.         spec: (目标状态)
  6.           selector:
  7.             matchLabels:
  8.               app: nginx
  9.           replicas: 2 # tells deployment to run 2 pods matching the template
  10.           template:
  11.             metadata:
  12.               labels: (labels and selector)
  13.                 app: nginx
  14.             spec:
  15.               containers:
  16.               - name: nginx
  17.                 image: nginx:1.14.2
  18.                 ports:
  19.                 - containerPort: 80
复制代码
Service:基于pod创建对外或者对内网络服务
三.构建无状态服务

无状态服务:服务不依赖自身的状态,实例的状态数据可以维护在内存中。
构建步骤如下:
   0.笔者这里使用minikube进行测试,先启动minikube   
  1. minikube start
  2. minikube dashboard # 启动后台管理界面
复制代码

1.执行部署
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   labels:
  5.     app.kubernetes.io/name: load-balancer-example
  6.   name: hello-world
  7. spec:
  8.   replicas: 5
  9.   selector:
  10.     matchLabels:
  11.       app.kubernetes.io/name: load-balancer-example
  12.   template:
  13.     metadata:
  14.       labels:
  15.         app.kubernetes.io/name: load-balancer-example
  16.     spec:
  17.       containers:
  18.       - image: gcr.io/google-samples/node-hello:1.0
  19.         name: hello-world
  20.         ports:
  21.         - containerPort: 8080
复制代码
  1. kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml
复制代码
2.查看部署信息
  1. kubectl get deployments hello-world
  2. kubectl describe deployments hello-world
  3. NAME          READY   UP-TO-DATE   AVAILABLE   AGE
  4. hello-world   5/5     5            5           12m
复制代码
3.查看副本集
这里我们创建了五个副本
  1. kubectl get replicasets
  2. kubectl describe replicasets
  3. NAME                         DESIRED   CURRENT   READY   AGE
  4. hello-world-644f58f5f4       5         5         5       12m
复制代码
4.创建Service暴露部署
  1. kubectl expose deployment hello-world --type=LoadBalancer --name=my-service # LoadBalancer表示使用负载均衡的方式
复制代码
5.查看Service
  1. kubectl get services my-service
  2. NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
  3. my-service   LoadBalancer   10.102.184.247   <pending>     8080:31755/TCP   3s
复制代码
6.查看Service详细信息
  1. kubectl describe services my-service
复制代码
[code]Name:                     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:
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表