• 老男孩K8S集群部署(一)


    本文是我学习了老男孩k8s后做的笔记,整理成博客发表出来便于自己之后复习回顾。

    使用docker的意义

    我们的互联网有3次重大的飞跃:
    第一次飞跃:C/S架构-->B/S架构 (客户端/服务器-->浏览器/服务器)
    第二次飞跃:app
    第三次飞跃:小程序

    使用docker引擎的缺点

    CNCF 云原生计算机基金会

    UTS
    NET 网络
    IPC 进程间通信

    ingress用的最多,因为互联网公司大多是七层的服务。
    由一个域名去寻找pod的过程:ingress-->service-->pod

    所有组件是通过apiserver来通信的,是一个通信枢纽

    controller-manager需要有高可用机制

    scheduler调度

    kubelet 干活的组件,脏活累活都是kubelet干

    kube-proxy组件:将clusterip和podip关联起来,提供集群网络
    ipvs:ipvs工具已经内嵌到linux内核里了。

    节点网络-->宿主机网络 10.4.7.0/24 实网络
    pod网络-->从宿主机上nat出来的 172.7.0.0/16 实网络
    service网络-->连接pod和节点网络 192.168.0.0/16 虚网络

    三个对应3段私有地址
    node第二位ip 4 代表机房地址
    第三位ip 7 区分业务和环境 通过vlan做物理隔离

    上图是逻辑上的数据流向

    反代的同时做了高可用。
    4层反代apiserver 7层反代ingress

    准备虚拟机

    我使用的是192.168.172.0/24网络

    主机名 ip 功能
    hdss172-21.host.com 192.168.172.21 k8s-master01 k8s代理节点1
    hdss172-22.host.com 192.168.172.22 k8s-master02 k8s代理节点2
    hdss172-23.host.com 192.168.172.23 k8s-worker01 k8s运算节点1
    hdss172-24.host.com 192.168.172.24 k8s-worker02 k8s运算节点2
    hdss172-25.host.com 192.168.172.25 docker仓库 k8s运维节点(docker仓库)

    vip 192.168.172.100

    安装epel源:

    yum install epel-release -y
    

    关闭selinux和firewalld:

    setenforce 0
    getenforce
    systemctl stop firewalld
    

    安装必要工具:

    yum install wget net-tools telnet tree nmap sysstat lrzsz dos2unix bind-utils -y
    

    DNS服务初始化

    在hdss-172-21.host.com上:
    安装bind9软件,因为我们要用ingress,7层流量调度,要有域名。

    yum install bind –y
    

    配置主配置文件:

    vim /etc/named.conf
    listen-on port 53 { 192.168.172.21; };
    allow-query     { any; };
    forwarders      { 114.114.114.114; };
    recursion yes;  dns查询是使用递归的方式来查询的
    dnssec-enable no;
    dnssec-validation no;
    

    检查配置:

    named-checkconf
    

    没有报错

    配置区域配置文件:

    vim /etc/named.rfc1912.zones
    在最后添加:
    zone "host.com" IN {
            type master;
            file "host.com.zone";
            allow-update { 192.168.172.21; };
    };
    
    zone "od.com" IN {
            type master;
            file "od.com.zone";
            allow-update { 192.168.172.21; };
    };
    

    主机域:毫无意义且好记的域 host.com
    允许本机update。

    业务域:od.com

    编辑区域数据文件:

    vim /var/named/host.com.zone
    $ORIGIN host.com.
    $TTL 600    ; 10 minutes        
    @       IN SOA  dns.host.com.  dnsadmin.host.com. (
                    2021070501 ; serial
                    10800      ; refresh(3 hours)
                    900        ; retry(15 minutes)
                    604800     ; expire(1 week)
                    86400 )    ; minimum(1 day)
            NS      dns.host.com.        
    $TTL 60 ; 1 minute
    dns            A       192.168.172.21    
    hdss172-21     A       192.168.172.21    
    hdss172-22     A       192.168.172.22    
    hdss172-23     A       192.168.172.23    
    hdss172-24     A       192.168.172.24    
    hdss172-25     A       192.168.172.25
    

    配置文件中的;分号代表注释

    cp /var/named/host.com.zone /var/named/od.com.zone
    
    vim /var/named/od.com.zone
    $ORIGIN od.com.
    $TTL 600    ; 10 minutes        
    @       IN SOA  dns.od.com.  dnsadmin.od.com. (
                    2021070501 ; serial
                    10800      ; refresh(3 hours)
                    900        ; retry(15 minutes)
                    604800     ; expire(1 week)
                    86400 )    ; minimum(1 day)
            NS      dns.od.com.  
    $TTL 60 ; 1 minute
    dns            A       192.168.172.21
    

    再次检查配置:

    named-checkconf
    

    启动named服务:

    systemctl start named
    

    dns服务开启的是53端口

    dig检查一下dig -t A hdss172-21.host.com @192.168.172.21 +short

    所以,DNS服务正常。

    修改网络配置,将所有DNS1修改为hdss172-21.host.com的ip 192.168.172.21,重启网络服务,ping www.baidu.com是否正常,此时的dns服务器是192.168.172.21。

    ping hdss172-21.host.com

    编辑5台机器:

    vim /etc/resolv.conf
    search host.com
    nameserver 192.168.172.21
    

    准备签发证书环境

    在hdss172-25.host.com上:

    wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/bin/cfssl
    wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/bin/cfssl-json
    wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/bin/cfssl-certinfo
    chmod +x /usr/bin/cfssl*
    

    新建存放自签证书的目录:

    mkdir /opt/certs
    

    根证书--ca证书,也就是权威证书,权威机构签发的。
    创建ca证书的请求文件:

    /opt/certs/ca-csr.json
    

    expiry:过期时间,默认是1年。175200h就是20年。

    cat ca-csr.json 
    {
      "CN": "OldboyEdu",
      "hosts": [
      ],
      "key": {
          "algo": "rsa",
          "size":  2048
      },
      "names": [
         {
            "C": "CN",
            "ST": "beijing",
            "L": "beijing",
            "O": "od",
            "OU": "ops"
         }
      ],
      "ca": {
          "expiry": "175200h"
      }
    }
    

    签证书:

    cfssl gencert --initca ca-csr.json | cfssl-json -bare ca
    

    最重要的是ca-key.pem和ca.pem
    是根证书和根证书的私钥

    Docker环境安装

    在hdss172-23.host.com,hdss172-24.host.com,hdss172-25.host.com三台主机上。

    简单部署docker的命令:

    curl –fsSL https://get.docker.com | bash –s docker --mirror Aliyun
    

    hdss172-23.host.com机器配置:

    
    cat /etc/docker/daemon.json
    {
      "graph": "/data/docker",
      "storage-driver": "overlay2", 
      "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"],
      "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
      "bip": "192.168.23.1/24",
      "exec-opts": ["native.cgroupdriver=systemd"],
      "live-restore": true
    }
    

    hdss172-24.host.com机器配置:

    cat /etc/docker/daemon.json
    {
      "graph": "/data/docker",
      "storage-driver": "overlay2", 
      "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"],
      "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
      "bip": "192.168.24.1/24",
      "exec-opts": ["native.cgroupdriver=systemd"],
      "live-restore": true
    }
    

    hdss172-25.host.com机器配置:

    cat /etc/docker/daemon.json
    {
      "graph": "/data/docker",
      "storage-driver": "overlay2", 
      "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"],
      "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
      "bip": "192.168.25.1/24",
      "exec-opts": ["native.cgroupdriver=systemd"],
      "live-restore": true
    }
    

    3台主机上:

    mkdir -p /data/docker
    systemctl start docker
    docker info
    

    私有仓库 harbor

    harbor的github地址:https://github.com/goharbor/harbor/releases

    在hdss172-25.host.com主机上:
    选择1.7.6及其以上的版本,下载offline版本:

    tar zxf harbor-offline-installer-v1.8.3.tgz -C /opt/
    mv harbor/ harbor-v1.8.3
    

    做软链接便于harbor升级:

    ln -s harbor-v1.8.3/ harbor
    

    编辑harbor的配置文件harbor.yml:

    vim harbor.yml
    hostname: harbor.od.com
    http:
      port: 180
    log:
      location: /data/harbor/logs
    data_volume: /data/harbor
    harbor_admin_password: Harbor12345   #生产中需要改成较为复杂的密码
    

    新建日志目录,安装docker-compose,启动harbor:

    mkdir -p /data/harbor/logs
    yum install docker-compose –y
    sh /opt/harbor/install.sh
    

    docker-compose ps 
    

    docker ps –a
    

    用nginx反代180端口

    安装nginx,配置反向代理:

    yum install nginx –y
    nginx –t
    systemctl start nginx
    systemctl enable nginx
    

    在hdss172-21.host.com中做dns的解析。

    vim /var/named/od.com.zone
    

    注意序列号serial前滚一个序号

    systemctl restart named
    dig -t A harbor.od.com +short
    

    浏览器中访问:harbor.od.com
    用户名:admin
    密码:Harbor12345

    image

    新建项目 public 公开

    下载镜像nginx:

    docker pull nginx:1.7.9
    ==
    docker pull docker.io/library/nginx:1.7.9
    docker images | grep 1.7.9
    

    登录

    docker login harbor.od.com
    用户名:admin
    密码:Harbor12345
    

    上传镜像到harbor的public库:

    docker push harbor.od.com/public/nginx:v1.7.9
    

  • 相关阅读:
    03 Python之变量以及常量介绍
    看女程序员是如何处理男友出轨,网友回复更精彩
    四面美团,收割 offer
    MySQL 优化实战记录
    龙岗一个月350的出租房,我搬出来了
    程序员工作 996 生病 ICU ?
    真的有人在偷听我们讲话么?
    一次非常有趣的 SQL 优化经历
    如何阅读Java源码?
    从 0 开始手写一个 Mybatis 框架,三步搞定!
  • 原文地址:https://www.cnblogs.com/even160941/p/14973849.html
Copyright © 2020-2023  润新知