K8s个人浅试总结

一、k8s基础知识

   Kubernetes是一个可以移植、可扩展的开源平台,使用声明式配置并依据配置信息自动地执行容器化应用程序的管理。在所有的容器编排工具中,Kubernetes的生态系统更大、增长更快,有更多的支持、服务和工具可供用户选择。因为k到s之间有8个字母,所以简称k8s。

   容器化部署是目前主流的应用程序部署方式,在实际的生产的环境,技术人员需要管理容器化应用程序,并确保其不停机连续运行,例如停机快速重启替补容器,容器版本更新等。类似的容器管理工作需要容器管理系统来执行,而k8s就是这样的管理系统。

     k8s在容器管理上具体以下特性:

  • 服务发现和负载均衡

       k8s通过DNS名称或者容器IP地址暴露容器的访问方式,并且可以在同组容器内分发负载,实现负载均衡。

  • 存储编排

        k8s可以自动挂载指定的存储系统。

  • 自动发布和回滚

        通过声明式配置实现。

  • 自我愈合能力

        包括自动重启停机容器、替换或kill不健康容器、隐藏未就绪容器等。

  • 密钥和配置管理

        k8s可以存储和管理敏感信息。


  K8s个人浅试总结_第1张图片

 上图是一个k8s集群的典型架构图,各部分组件如下。

     (1)Kubernetes Master

         master组件是整个k8s集群的控制平台(control plane),负责全局决策和探测并响应集群事件,相当于集群的大脑。其中的API Server提供与k8s集群交互的API,Replication Controller负责监控并保证有指定数量的Pod在运行。

     (2)Server

         server的作用是与对应标签的Pod网络连接,外网可以通过server访问对应的Pod里的应用程序。

     (3)Node   

        Node组件负责维护运行中的Pod并提供k8s运行时环境,其中有三个重要组件:kubelet,kube-proxy和容器引擎。

        kubelet负责确保Pod中的容器始终处于运行和健康状态;kube-proxy是一个网络代理程序,负责维护节点网络规则,与server的功能关联很大;容器引擎负责运行容器,k8s支持多种引擎,包括docker、cri-o等。

     (4)Pod

        Pod(上图绿色方框)包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。一些Pod还有Label(上图标签图形),一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。  

二、k8s安装(win10 docker destop为例)

   不同的操作系统,有不同的k8s安装方式,这里仅以笔者的win10系统docker desktop为例,其他方法可以看k8s官网的教程。

k8s安装官网教程

   需要下载docker desktop的可以去docker desktop 官网下载。 

docker desktop官网下载

   回归正题,docker desktop使用k8s有两种方法,一种是使用自带的k8s。

   打开docker desktop后,任务栏右键点击图标,选择About选项,会弹出docker desktop的配置。如下图所示。

   K8s个人浅试总结_第2张图片

   这里可以清楚看到docker desktop标明了k8s的版本,想要启用的话,点击setting选项,按下图选择好后,点击Apply按钮即可。

K8s个人浅试总结_第3张图片

   启动安装需要一段时间,完成后,左下角会出现k8s的绿色图标,表示k8s已经就绪。

    另一种安装方式是通过提前写好的配置文件,启动docker抓取需要的镜像完成安装,这样的好处可以自由选择k8s的版本,但是比较繁琐。感兴趣的可以搜索github的k8s官方仓库。

三、一些基础操作

  安装好了k8s,我们可以通过命令行进行一些基础操作。

   以win10为例,打开cmd或者power shell。

  1.检查k8s版本

kubectl version

  2. 列出集群中所有API组名/版本号

kubectl api-versions

K8s个人浅试总结_第4张图片

 3. 列出集群名称空间

kubectl get namespaces

K8s个人浅试总结_第5张图片

 4. 创建新的名称空间

kubectl create namespace 

K8s个人浅试总结_第6张图片

 5. 删除名称空间

kubectl delete namespaces 

K8s个人浅试总结_第7张图片

 6.获取全部节点

kubectl get nodes

 7.查看所有Pod

kubectl get pods

 由于还没有部署任何服务,目前的pod为空

 这些是一些基础性指令,更多的指令可以去官网或者学习网站查看,这里不过多赘述。

四、可视化工具

    虽然命令行可以做到所有事情,但是部署服务如果使用命令行显得过于繁琐,所以k8s的可视化工具也很重要。

    k8s的可视化工具有很多,比如dashboard, lens等。

    笔者选择的可视化工具是Kuboard,下面是Kuboard官网链接。

    Kuboard官网

    安装过程很简单。以docker为例,为了方便,笔者选择直接在k8s部署Kuboard。如果想要其他安装方式可以看官网的安装教程。 

    1.执行安装

kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml

    2.等待就绪

K8s个人浅试总结_第8张图片

      等待所有READY为1/1时

    3.访问Kuboard

      在浏览器打开链接http://localhost:30080,输入初始用户名:admin,密码:Kuboard123

K8s个人浅试总结_第9张图片

K8s个人浅试总结_第10张图片 至此大功告成,可视化界面进行很多操作都更加方便,比如创建工作负载,导入服务等等。 

五、部署一个简单服务

 下面进行一下简单的实战,使用k8s在本地部署一个简单的nginx服务。

 首先介绍用Kuboard如何操作。

 可视化工具的操作很便利,首先进入首页的集群,一般会有一个默认的default集群。

K8s个人浅试总结_第11张图片

 K8s个人浅试总结_第12张图片

可以看到目前集群中是空的。然后点击左侧菜单栏的创建工作负载。

K8s个人浅试总结_第13张图片 填入参数

服务类型 Deployment
服务分层 展现层
服务名称 nginx
副本数 1

 然后添加容器

容器名称 nginx
镜像 nginx
抓取策略 Always
Ports TCP : 80

保存后点击应用,再点击确定。这样一个简单的nginx程序就部署完成了。

K8s个人浅试总结_第14张图片

 点击如下图绿色按钮就可访问部署的nginx。

K8s个人浅试总结_第15张图片

 点开后是nginx的默认界面。

K8s个人浅试总结_第16张图片

 用指令查看Pod

 下面介绍如何用命令行部署。

 首先,创建文件 nginx-deployment.yaml,内容如下:

apiVersion: apps/v1	#与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment	#该配置的类型,我们使用的是 Deployment
metadata:	        #译名为元数据,即 Deployment 的一些基本属性和信息
  name: nginx-deployment	#Deployment 的名称
  labels:	    #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
    app: nginx	#为该Deployment设置key为app,value为nginx的标签
spec:	        #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
  replicas: 1	#使用该Deployment创建一个应用程序实例
  selector:	    #标签选择器,与上面的标签共同作用,目前不需要理解
    matchLabels: #选择包含标签app:nginx的资源
      app: nginx
  template:	    #这是选择或创建的Pod的模板
    metadata:	#Pod的元数据
      labels:	#Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: nginx
    spec:	    #期望Pod实现的功能(即在pod中部署)
      containers:	#生成container,与docker中的container是同一种
      - name: nginx	#container的名称
        image: nginx:1.7.9	#使用镜像nginx:1.7.9创建container,该container默认80端口可访问

应用yaml文件

kubectl apply -f nginx-deployment.yaml

查看部署结果

# 查看 Deployment
kubectl get deployments

# 查看 Pod
kubectl get pods

六、Secret 

    Sercet是一种保存敏感信息例如密码,令牌或者密钥的对象,类似于configMap但是专门用于保存敏感信息。这些敏感信息可能会被用在Pod或者docker镜像中,Secret的用处就是将敏感信息与这些隔离开,更好地控制其用途,降低意外暴露的风险。

    Pod使用Secret的方式有以下几种:

  1. 通过挂载容器卷上的文件
  2. 通过容器的环境变量
  3. 通过kubectl为Pod拉取镜像时使用

   Secret可以由以下方式创建:

    1.使用kubectl

kubectl create secret 

     使用此命令可以将指定文件创建为Secret。

     如果想要查看Secret是否创建成功可以使用下面的命令,将列出所有Secret。

kubectl get secrets

      如果想要编辑、删除Secret也可以使用Kubectl。

kubectl edit secrets 
kubectl delete secret 

    2.使用配置文件

       使用配置文件来创建Secret可以用JSON或YAML 格式在一个清单文件中定义Secret对象。

       Secret资源包含 2 个键值对:data和stringData。data字段用来存储 base64 编码的任意数据。提供stringData字段是为了方便,它允许 Secret 使用未编码的字符串。data和stringData的键必须由字母、数字、-_ 或 .组成。

      例如:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

      然后调用kubectl命令

kubectl apply -f ./secret.yaml

    3.使用Kustomize工具 

      Kustomize是kubectl支持的对象管理工具。

      在kustomization.yaml文件定义 secreteGenerator字段, 并在定义中引用其它本地文件、.env 文件或文字值生成 Secret。

       例如:

secretGenerator:
- name: database-creds
  literals:
  - username=admin
  - password=1f2d1e2e67df
kubectl apply -k <目录路径>

七、结语

    上面展示只是k8s的一小部分内容,还有很多方面扩展来说,例如上面创建的nginx可以通过创建Service来暴露给其他端口,部署的也可以是更复杂的springboot程序镜像。k8s还可以和其他管理系统配合使用,例如docker、Jenkins等。学习的道路永无止境。

你可能感兴趣的:(kubernetes)