• 架构师的成长之路初片~Virtual-kubernetes——云平台部署


    官方IP  https://kubernetes.io/docs/home/

    Kubernetes(K8S)
    Google为创造者,2014年宣布开源

    为什么要使用k8s?

      有大量跨主机的容器需要管理

      快速部署应用

      快速扩展应用

      无缝对接新的应用功能

      节省资源,优化硬件资源的使用

    为什么需要K8s?
    因为容器在编排、管理和调度等各个方面,管理不易。将Docker应用于具体的业务实现,较为困难。
    K8S是什么?
    K8s是容器集群管理系统,可实现容器集群的自动化部署、自动扩缩容、维护等功能

    K8S集群核心角色
    master(管理节点)
      apiserverscheduleretcdcontrollermanager
    node(计算节点)
      kubeletkube-proxydocker
      image(镜像仓库)

    K8S集群架构图解

    角色与功能

    K8S master节点(管理节点)

      Master提供集群的控制

      对集群进行全局的决策

      检测和响应集群事件

      Master主要由apiserver,scheduler,etcd和controllermanager服务组成

    K8S node节点(计算节点)

      运行实际容器节点

      维护运行Pod,并提供具体应用的运行环境

      node由kubelet、kube-proxy和docker组成

      计算节点被设计成水平扩展,该组件在多个节点上运行

    环境:

    按照如下配置准备云主机
    
    主机名      IP地址          最低配置
    master      192.168.1.21      2CPU,2G内存
    node-0001    192.168.1.31      2CPU,2G内存
    node-0002    192.168.1.32      2CPU,2G内存
    node-0003    192.168.1.33      2CPU,2G内存
    registry     192.168.1.100      1CPU,1G内存



    内核版本 >=3.10            /uname -r
    最低配置2cpu,2G内存
    节点之中不可以有重复的主机名、MAC地址....
    卸载防火墙            /rpm -evh firewalld-*
    禁用swap            /free -m
    禁用selinux          /cat /etc/selinux/conf

    K8S集群安装部署

    1:私有镜像仓库:

    2:Master安装部署

      2.1安装工具部署

      2.2服务镜像部署

      2.3:master安装

    3:node安装部署

      3.1:token管理

      3.2:node安装

    ------------------------------------------------------------------------------

    1:私有镜像仓库:

    1:安装仓库服务
    [root@registry ~]# yum makecache
    [root@registry ~]# yum install -y docker-distribution
    [root@registry ~]# systemctl enable --now docker-distribution


    2:使用脚本初始化仓库

    拷贝云盘 kubernetes/v1.17.6/registry/myos目录 到 仓库服务器

    [root@registry ~]# cd myos
    [root@registry ~]# chmod 755 init-img.sh
    [root@registry ~]# ./init-img.sh
    [root@registry ~]# curl http://192.168.1.100:5000/v2/myos/tags/list
    {"name":"myos","tags":["nginx","php-fpm","v1804","httpd"]}
     
    脚本:
    yum install -y docker-ce
    mkdir -p /etc/docker
    cat >/etc/docker/daemon.json <<'EOF'
    {
        "exec-opts": ["native.cgroupdriver=systemd"],
        "registry-mirrors": ["https://hub-mirror.c.163.com"],
        "insecure-registries":["192.168.1.100:5000", "registry:5000"]
    }
    EOF
    systemctl enable --now docker.service
    systemctl restart docker.service
    docker load -i myos.tar.gz
    # init apache images
    cat >Dockerfile<<'EOF'
    FROM myos:latest
    ENV  LANG=C
    WORKDIR /var/www/html/
    EXPOSE 80
    CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
    EOF
    docker build -t 192.168.1.100:5000/myos:httpd .
    
    # init php-fpm images
    cat >Dockerfile<<'EOF'
    FROM myos:latest
    EXPOSE 9000
    WORKDIR /usr/local/nginx/html
    CMD ["/usr/sbin/php-fpm", "--nodaemonize"]
    EOF
    docker build -t 192.168.1.100:5000/myos:php-fpm .
    
    # init nginx images
    cat >Dockerfile<<'EOF'
    FROM myos:latest
    EXPOSE 80
    WORKDIR /usr/local/nginx/html
    CMD  ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
    EOF
    docker build -t 192.168.1.100:5000/myos:nginx .
    
    # upload images
    rm -f Dockerfile
    docker tag myos:latest 192.168.1.100:5000/myos:v1804
    for i in v1804 httpd php-fpm nginx;do
        docker push 192.168.1.100:5000/myos:${i}
    done

    内部还有2个centos及..容器的镜像

    安装Master

     API Server

      是整个系统的对外接口,供客户端和其他组件调用

      后端元数据存储与etcd中(键值数据库)

    Scheduler

      负责对集群内部的资源进行调度,类似与“调度室”

    Controller manager

      负责管理控制器,相当于“大总管”

    etc键值管理

      采用键值对的形象存储信息

    服务端口

    安装软件包:

    kubeadmkubectlkubeletdocker-ce

    [root@master ~]# yum makecache
    [root@master ~]# yum install -y kubeadm kubelet kubectl docker-ce
    [root@master ~]# mkdir -p /etc/docker
    [root@master ~]# vim /etc/docker/daemon.json 
    {
        "exec-opts": ["native.cgroupdriver=systemd"],
        "registry-mirrors": ["https://hub-mirror.c.163.com"],
        "insecure-registries":["192.168.1.100:5000", "registry:5000"]    //指定仓库
    }
    [root@master ~]# systemctl enable --now docker kubelet
    [root@master ~]# docker info |grep Cgroup                    //查看状态
    Cgroup Driver: systemd
    [root@master ~]# vim /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1                    //开启桥设备内核监控功能(ipv6)
    net.bridge.bridge-nf-call-iptables = 1                    //开启桥设备内核监控功能(ipv4)
    net.ipv4.ip_forward = 1                            //开启路由转发
    [root@master ~]# modprobe br_netfilter                    //加载内核模块
    [root@master ~]# sysctl --system                        //加载上面的k8s.conf配置文件

    4:镜像导入私有仓库

    # 把云盘 kubernetes/v1.17.6/base-images 中的镜像拷贝到 master
    [root@master ~]# cd base-images/
    [root@master base-image]# for i in *.tar.gz;do docker load -i ${i};done
    [root@master base-image]# docker images
    [root@master base-image]# docker images |awk '$2!="TAG"{print $1,$2}'|while read _f _v;do
        docker tag ${_f}:${_v} 192.168.1.100:5000/${_f##*/}:${_v}; 
        docker push 192.168.1.100:5000/${_f##*/}:${_v}; 
        docker rmi ${_f}:${_v}; 
    done
    # 查看验证
    [root@master base-image]# curl http://192.168.1.100:5000/v2/_catalog      //查看仓库中的镜像,是否上传完成


    5、Tab键设置

    由于k8s的命令长,所以我们导入tab健的命令

    [root@master ~]# kubectl completion bash >/etc/bash_completion.d/kubectl
    [root@master ~]# kubeadm completion bash >/etc/bash_completion.d/kubeadm
    [root@master ~]# exit


    6、安装IPVS代理软件包

    [root@master ~]# yum install -y ipvsadm ipset


    7、配置主机名

    [root@master ~]# vim /etc/hosts
    192.168.1.21    master
    192.168.1.31    node-0001
    192.168.1.32    node-0002
    192.168.1.33    node-0003
    192.168.1.100    registry

    8、使用kubeadm部署

    应答文件在云盘的 kubernetes/v1.17.6/config 目录下

    生成 kubeadm-init.yaml   文件的命令 :
    kubeadm config print init-defaults > kubeadm-init.yaml
    应答文件在云盘的 kubernetes/v1.17.6/config 目录下
    
    [root@master ~]# mkdir init;cd init
    # 拷贝 kubeadm-init.yaml 到 master 云主机 init 目录下
    [root@master init]# kubeadm init --config=kubeadm-init.yaml |tee master-init.log
    # 根据提示执行命令
    [root@master init]# mkdir -p $HOME/.kube
    [root@master init]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@master init]# sudo chown $(id -u):$(id -g) $HOME/.kube/config


    9、验证安装结果

    [root@master ~]# kubectl version
    [root@master ~]# kubectl get componentstatuses
    NAME                        STATUS          MESSAGE                 ERROR
    controller-manager           Healthy         ok
    scheduler                   Healthy           ok
    etcd-0                         Healthy           {"health":"true"}

    计算节点安装

    1:获取master的token

    # 创建token
    [root@master ~]# kubeadm token create --ttl=0 --print-join-command
    [root@master ~]# kubeadm token list
    # 获取token_hash
    [root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der |openssl dgst -sha256 -hex


    2、node安装

    拷贝云盘上 kubernetes/v1.17.6/node-install 到跳板机
    
    [root@ecs-proxy ~]# cd node-install/
    [root@ecs-proxy node-install]# vim files/hosts
    ::1             localhost localhost.localdomain localhost6 localhost6.localdomain6
    127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
    192.168.1.21    master
    192.168.1.31    node-0001
    192.168.1.32    node-0002
    192.168.1.100   registry
    [root@ecs-proxy node-install]# vim node_install.yaml
    ... ...
      vars:
        master: '192.168.1.21:6443'
        token: 'fm6kui.mp8rr3akn74a3nyn'
        token_hash: 'sha256:f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c'
    ... ...
    [root@ecs-proxy node-install]# ansible-playbook node_install.yaml


    3、验证安装

    [root@master ~]# kubectl get nodes
    NAME        STATUS     ROLES    AGE     VERSION
    master      NotReady   master   130m    v1.17.6
    node-0001   NotReady   <none>   2m14s   v1.17.6
    node-0002   NotReady   <none>   2m15s   v1.17.6
    节点      就绪状态  


    网络插件安装配置

    软件地址:https://github.com/coreos/flannel
    资源文件:kube-flannel.yml
    镜像文件:flannel.tar.gz

    拷贝云盘 kubernetes/v1.17.6/flannel 目录到 master 上


    1、上传镜像到私有仓库

    [root@master ~]# cd flannel
    [root@master flannel]# docker load -i flannel.tar.gz
    [root@master flannel]# docker tag quay.io/coreos/flannel:v0.12.0-amd64 192.168.1.100:5000/flannel:v0.12.0-amd64
    [root@master flannel]# docker push 192.168.1.100:5000/flannel:v0.12.0-amd64


    2、修改配置文件并安装

    [root@master flannel]# vim kube-flannel.yml
    128: "Network": "10.244.0.0/16",
    172: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
    186: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
    227-结尾: 删除
    [root@master flannel]# kubectl apply -f kube-flannel.yml

    3、验证结果

    [root@master flannel]# kubectl get nodes
    NAME          STATUS    ROLES    AGE        VERSION
    master        Ready    master    26h        v1.17.6
    node-0001    Ready    <none>    151m    v1.17.6
    node-0002    Ready    <none>    152m    v1.17.6
    

    ---flannel理论---

    Flannel实质上是一种“覆盖网络(overlay network)”,也就是将tcp数据包装在另一种网络包里面进行路由转发和通信,目前已经
    支持UDP、VxLANAWSVPC和GCE路由等数据转发方式
    使用flannel目标
      不同主机内的容器实现互联互通

    结构图如下:

    软件地址: https://github.com/coreos/flannel

    资源文件:  kube-flannel.yml

    镜像文件:  flannel.tar.gz

  • 相关阅读:
    连续最大和
    买苹果(找规律)
    最大的奇约数(找规律化简)
    暗黑字符串(递推)
    虚拟机无法通过桥接上网
    使用SQLServer 2012修改表
    使用SQL Server 2012创建表
    使用SQL Server 2012创建和删除数据库
    SQL Server 2012安装
    关系型数据模型
  • 原文地址:https://www.cnblogs.com/ahaocloud/p/14765796.html
Copyright © 2020-2023  润新知