k8s 介绍与基本使用

一、k8s基本介绍

kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源 的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的 应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种 机制。

Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、 应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便 对应用请求进行负载均衡。

在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通 过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需 要运维人员去进行复杂的手工配置和处理。

二、K8s 所具备的功能

  1. 自动装箱

    基于容器对应用运行环境的资源配置要求自动部署应用容器

  2. 自我修复(自愈能力)

    当容器失败时,会对容器进行重启,当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度,当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

  3. 水平扩展

    通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大 或规模剪裁

  4. 服务发现

    用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和 负载均衡

  5. 滚动更新

    可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新

  6. 版本回退

    可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退

  7. 密钥和配置管理

    在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

  8. 存储编排

    自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务

  9. 批处理

    提供一次性任务,定时任务;满足批量数据处理和分析的场景

三、k8s 集群架构节点角色功能

Master Node

k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求; Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成

Worker Node

集群工作节点,运行用户业务应用容器; Worker Node 包含 kubelet、kube proxy 和 ContainerRuntime;

k8s 介绍与基本使用_第1张图片

四、k8s集群搭建

k8s集群搭建在我上篇博客,有详细的介绍:

使用kubeadm快速部署一个K8s集群

使用kubeadm搭建高可用的K8s集群

五、K8s的资源管理

在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。

kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。

kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。

Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了Service资源实现这个功能。

当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系统。
k8s 介绍与基本使用_第2张图片

六、kubectl 常用命令

kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:

kubectl [command] [type] [name] [flags]

  1. 查看版本

     kubectl --version
    
  2. 查看所有的pods

    kubectl get pod
    
  3. 查看所有的nodes

    kubectl get nodes
    
  4. 查看所有的pods(详细)

    kubectl get pods -o wide
    
  5. 查看所有的namespace

    kubectl get pod --all-namespaces
    
  6. 以yaml文件形式显示一个pod详细信息

    kubectl get pod pod-redis -o yaml
    
  7. 以json格式显示一个pod的详细信息

    kubectl get pod pod-redis -o json
    
  8. 显示一个pod的详细信息

    kubectl describe pod pod-redis
    
  9. 创建容器

    kubectl create deployment nginx --image=nginx
    
  10. 删除根据resource名或label删除resource。

    kubectl delete -f rc-nginx.yaml
    kubectl delete pod -lapp=nginx
    kubectl delete deployment tomcat
    

七、用法示例

1. 创建一个namespace

创建一个nginxpod.yaml,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: dev
---
apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest
kubectl create -f nginxpod.yaml

查看资源

kubectl get -f nginxpod.yaml

删除资源

kubectl delete -f nginxpod.yaml

2. kubectl apply -f yaml声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。

kubectl apply -f nginxpod.yaml

其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
使用apply操作资源:
如果资源不存在,就创建,相当于 kubectl create
如果资源已存在,就更新,相当于 kubectl patch

八、使用K8s快速搭建 tomcat

tomcat_dep.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mytomcat
spec:
  replicas: 5
  selector:
    matchLabels:
      app: mytomcat
  minReadySeconds: 1
  progressDeadlineSeconds: 60
  revisionHistoryLimit: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      name: mytomcat
      labels:
        app: mytomcat
    spec:
      containers:
      - name: mytomcat
        image: tomcat:8
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: tz-config
          mountPath: /etc/localtime
      volumes:
      - name: tz-config
        hostPath:
          path: /usr/share/data
kubectl create -f tomcat_dep.yaml

tomcat_svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: mytomcat
spec:
  type: NodePort
  ports:
   - port: 8080
     nodePort: 30012
  selector:
    app: mytomcat

kubectl create -f tomcat_svc.yaml

在node上查看
k8s 介绍与基本使用_第3张图片
修改tomcat_dep.yaml 中replicas数量后,运行kubectl apply -f tomcat_dep.yaml可以扩容或收缩副本数量

你可能感兴趣的:(k8s,kubernetes)