• Kubernetes 简介


    一、Kubernetes 相关概念

    1. Kubernetes 是一个开源的容器集群管理系统,主要用来自动化部署容器 、自动扩展与收缩容器规模 、提供容器间的负载均衡
    2. Node:Node(节点)也就是宿主机,宿主机可以是物理机 、云主机 、虚拟机等等,我们可以在一个宿主机上跑多个容器(container)
    3. Pod:我们可以在一个宿主机上跑多个容器,为了高可用和负载均衡,我们把多个容器组成一个Pod,同一个Pod里的容器共享同一个网络命名空间,可以使用 localhost 互相通信;
        每个Pod里都有一个特殊的容器(Pause),这个容器提供网络栈和数据卷,其他普通容器共享这个容器的资源,因此同一个Pod内容器之间的通信和数据交换更为高效
    4. Service:多个功能相同的Pod组成一个Service(微服务),Kubernetes 集群是由多个 Service 组成的,我们可以通过 ip:port 的形式来访问Service;
        多个功能相同的Pod,我们要怎么区分呢?我们会给每个Pod打一个Label(标签),Service 通过 Label 来找到指定的Pod
    5. Kubernetes Master:在一个Kubernetes集群里面,会有多个Node节点,而 Kubernetes Master 这个节点作为主节点,用来管理其他的Node节点,包括资源管理 、Pod调度 、弹性伸缩 、安全控制 、系统监控 、纠错等功能;
        Kubernetes Master 上运行的 Replication Controller(RC)就是用来控制弹性伸缩的,通过控制Pod的数量来实现。

    二、Kubernetes 实例

    1. 这里通过一个小例子,更好地理解 Kubernetes 相关术语之间的关系
    2. 首先创建一个 MySQL Service,然后创建一个 Web Service,最后用 Web Service 去连接 MySQL Service
    3. 环境:一台 CentOS 7.5 机器(如果低于7.5需要 yum update 一下)、内存 3G 或以上

    ① 关闭 firewalld 和 selinux

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    [root@localhost ~]# setenforce 0

    ② 安装 etcd 和 kubernetes,etcd 是用来存储Kubernetes集群里的配置文件的

    [root@localhost ~]# yum install -y etcd kubernetes

    ③ 修改配置文件

    [root@localhost ~]# vim /etc/sysconfig/docker        # 将 --selinux-enabled 改为 --selinux-enabled=false --insecure-registry gcr.io
    [root@localhost ~]# vim /etc/kubernetes/apiserver    # 将 --admission_control 参数中的 ServiceAccount 删除

    ④ 其他准备工作

    [root@localhost ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
    [root@localhost ~]# rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm |cpio -iv --to-stdout ./etc/rhsm/ca/redhatuep.pem > /etc/rhsm/ca/redhat-uep.pem
    [root@localhost ~]# vim /etc/docker/daemon.json   # 配置加速器
    {
        "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
    }

    ⑤ 按顺序启动所有服务

    for s in etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy
    do
        systemctl start $s
    done

    ⑥ 创建一个 RC 文件,用来控制 MySQL 的 Pod 数量

    [root@localhost ~]# vim mysql-rc.yaml
    apiVersion: v1
    kind: ReplicationController    # RC(副本控制器)
    metadata:
      name: mysql                  # RC的名字
    spec:
      replicas: 1                  # 控制Pod的数量为1
      selector:
        app: mysql                 
      template:
        metadata:
          labels:
            app: mysql             # 定义Pod的标签,以便Service能够找到Pod
        spec:
          containers:              # 定义Pod里的容器
            - name: mysql
              image: mysql:5.6
              ports:
              - containerPort: 3306
              env:
                - name: MYSQL_ROOT_PASSWORD
                  value: "123456"
    [root@localhost ~]# kubectl create -f mysql-rc.yaml    # 根据RC文件来创建一个RC
    [root@localhost ~]# kubectl get rc                     # 查看是否创建了RC
    NAME      DESIRED   CURRENT   READY     AGE
    mysql     1         1         0         1m
    [root@localhost ~]# kubectl get pod    # 查看Pod数量,只有状态是Running的时候才是创建完了,否则的就是还在下载镜像的阶段
    NAME          READY     STATUS     RESTARTS   AGE
    mysql-dr556   0/1       Running    0          3m

    ⑥ 创建一个 MySQL Service

    [root@localhost ~]# vim mysql-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
    spec:
      ports:
        - port: 3306
      selector:
        app: mysql
    [root@localhost ~]# kubectl create -f mysql-service.yaml        # 创建 MySQL Service
    [root@localhost ~]# kubectl get service                         # 查看是否创建了 MySQL Service
    NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    kubernetes   10.254.0.1       <none>        443/TCP    19m
    mysql        10.254.211.198   <none>        3306/TCP   8s
    [root@localhost ~]# mysql -uroot -p123456 -h10.254.211.198    # 创建完 MySQL Service,我们就可以使用 ip:port 的方式来访问了
    Welcome to the MariaDB monitor.  Commands end with ; or g.   # 如果没有mysql命令,可以通过 yum install -y mysql 来安装
    Your MySQL connection id is 1
    Server version: 5.6.42 MySQL Community Server (GPL)
    
    MySQL [(none)]> 

    ⑦ 创建一个 RC 文件,用来控制 Web 的 Pod 数量,并制定去连接 MySQL Service

    [root@localhost ~]# vim web-rc.yaml 
    kind: ReplicationController
    metadata:
      name: myweb
    spec:
      replicas: 1
      selector:
        app: myweb
      template:
        metadata:
          labels:
            app: myweb
        spec:
          containers:
            - name: myweb
              image: kubeguide/tomcat-app:v1
              ports:
                - containerPort: 8080
              env:
                - name: MYSQL_SERVICE_HOST
                  value: '10.254.211.198'    # 这里的IP需要通过 kubectl get service 查看 mysql 的 cluster ip
                - name: MYSQL_SERVICE_PORT
                  value: '3306'
    [root@localhost ~]# kubectl create -f web-rc.yaml    # 根据RC文件来创建一个RC        
    [root@localhost ~]# kubectl get rc                   # 查看是否创建了RC
    NAME      DESIRED   CURRENT   READY     AGE
    mysql     1         1         1         19m
    myweb     1         1         0         46s
    [root@localhost ~]# kubectl get pod    # 查看Pod数量,只有状态是Running的时候才是创建完了,否则的就是还在下载镜像的阶段
    NAME          READY     STATUS    RESTARTS   AGE
    mysql-dr556   1/1       Running   0          19m
    myweb-5tlwc   0/1       Running   0          55s

    ⑦ 创建 Web Service

    [root@localhost ~]# vim web-service.yaml 
    kind: Service
    metadata:
      name: myweb
    spec:
      type: NodePort
      ports:
        - port: 8080
          nodePort: 30001
      selector:
        app: myweb
    [root@localhost ~]# kubectl create -f web-service.yaml    # 创建 Web Service
    [root@localhost ~]# kubectl get service                   # 查看是否创建了 Web Service
    NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    kubernetes   10.254.0.1       <none>        443/TCP          35m
    mysql        10.254.211.198   <none>        3306/TCP         16m
    myweb        10.254.103.27    <nodes>       8080:30001/TCP   6s

    ⑧ 测试

    [root@localhost ~]# iptables -P FORWARD ACCEPT

        

        

  • 相关阅读:
    Springboot打包成WAR包独立布署后找不到静态js文件
    layui实现数据分页功能(ajax异步)
    layer.prompt(options, yes)
    layer回调函数
    Html中的position:absolute的意思
    SQL基础-DML
    mysql的pager命令
    由于rngd进程导致的tomcat 启动慢
    elasticsearch安装
    zookeeper的observer模式
  • 原文地址:https://www.cnblogs.com/pzk7788/p/10198841.html
Copyright © 2020-2023  润新知