zoukankan      html  css  js  c++  java
  • Kubernetes(K8s) 学习笔记 updating...

    官网:

    https://kubernetes.io/
    https://github.com/kubernetes/kubernetes

    谷歌Borg,后经过Go语言重写并捐献给CNCF基金会开源

    Kubernetes    舵手/飞行员     

    开源的容器编排框架工具(生态极其丰富)

    Pod/Pod控制器

    Pod

    Pod控制器 

     

    Name/Namespace

    Name

    Namespace

      

    Label/Label选择器

    Label

     Label选择器

    Service/Ingress 

    Service

      

    Ingress

     

    kube-apiserver服务

    controller-manager 

      

     scheduler

    kubelet

    kube-proxy

    PS: k8s 三种网络  及IP划分推荐

    NODE 节点网络(宿主机网络)  10.x.x.0/24

    POD 容器网络  172.x.0.0/16

    Service 集群网络   192.168.x.x/16

    IP规划每个ip号码要有具体意义,便于排错  POD和NODE 要近似:

    例如:

    10 段代表Node网络

    172 段代表Pod网络

    192 段代表 Service网络

    10.4.7.x/16     代表Node节点,4号机房下面的测试服务器,x号  

    10 = IDC的私有地址

    4 = 机房区域(比如代表)

    7 = 不同的项目,不同的环境(7测试,8预生产,9生产)

    172.4.7.x/24  代表Pod节点,4号机房下面的测试服务器

     K8S 逻辑架构图 参考

    K8S 集群架构图

     # 5台主机,1个VIP

    10.4.7.10  VIP

    10.4.7.200  运维主机

    10.4.7.11  master   

    10.4.7.12  standby 

    10.4.7.21  主控节点、运算节点  核心组件

    104.7.22   主控节点、运算节点   核心组件

    K8S部署方式种:

    Minikube  

    # 直接Webshell 体验

    https://kubernetes.io/zh/docs/tutorials/hello-minikube/

    二进制安装部署

    SSL 需要自签发证书(自签发证书:默认一年)

    # 环境简介

    192.168.27.101

    192.168.27.102

    192.168.27.103

    192.168.27.104

    192.168.27.105

    # 初始化设置

    安装和克隆虚拟机(略)

    hostnamectl set-hostname <主机名>

    调整yum源

    yum install epel-release

    关闭selinux和firewalld

    setenforce 0

    systemctl stop firewalld

    必备工具安装

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

    ntpdate ntp1.aliyun.com  # 把所有测试机时间同步

    安装DNS(bind)在 27.101

    sudo yum install bind -y

    主配置文件

    vi /etc/named.conf

    ----------------修改内容--------------------

    listen-on port 53 { 192.168.27.101; };

    allow-query     { any; };

    dnssec-enable no;
    dnssec-validation no;

    -------------------增加内容-------------------

    forwarders      { 114.114.114.114; };  # 设置可用的DNS地址

    # 检查DNS配置文件设置是否成功

    sudo named-checkconf   # 没有报错表示成功

    区域配置文件

    /etc/named.rfc1912.zones 

    ---------------增加内容------------------------

    zone "host.com" IN {
    type master;
    file "host.com.zone";
    allow-update { 192.168.27.11; };
    };

    zone "od.com" IN {
    type master;
    file "od.com.zone";
    allow-update { 192.168.27.11; };
    };

    区域数据文件

    /var/named/host.com.zone

    ---------------增加内容----------------------------

    $ORIGIN host.com.
    $TTL 600        ; 10 minutes
    @       IN SOA  dns.host.com. dnsadmin.host.com. (
                                    2020071001  ; 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.27.101
    HDSS7-11                A    192.168.27.101
    HDSS7-12                A    192.168.27.102
    HDSS7-21                A    192.168.27.103
    HDSS7-22                A    192.168.27.104
    HDSS7-200               A    192.168.27.105

    /var/named/od.com.zone

    ---------------增加内容----------------------------

    $ORIGIN od.com.
    $TTL 600        ; 10 minutes
    @       IN SOA  dns.host.com. dnsadmin.od.com. (
                                    2020071001    ; 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.27.101

    再次效验dns配置文件

    named-checkconf

    启动DNS服务

    systemctl start named

    使用dig测试解析结果

    dig -t A hdss7-21.host.com @192.168.27.101 +short

    看到此结果表示dns生效,现在就把你本地的dns指向到这个DNS服务器

     vim /etc/sysconfig/network-scripts/ifcfg-ensXXX 

    ------------------修改配置文件---------------------

    DNS1=192.168.27.101   # IP为你搭建的DNS服务器IP

    Tips: 添加短域名解析

    /etc/resolv.conf

    # Generated by NetworkManager
    search host.com  # 一般仅用于主机域
    nameserver 192.168.27.101

    # 使用短域名进行ping 也是可以解析

    把所有剩下的服务器全部主DNS修改为192.168.27.101

    准备签发证书环境

    在运维主机上HDSS7-200(192.168.27.105)上:

    CFSSL

    是CloudFlare开源的一款PKI/TLS工具。 CFSSL 包含一个命令行工具 和一个用于 签名,验证并且捆绑TLS证书的 HTTP API 服务。 使用Go语言编写。

    Github 地址: https://github.com/cloudflare/cfssl
    官网地址: https://pkg.cfssl.org/

    安装CFSSL

    wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/bin/cfssl

    wget https://pkg.cfssl.org/R1.1/cfssljson_linux-amd64 -O /usr/bin/cfssl-json

    wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/bin/cfss-certinfo

    chmod +x /usr/bin/cfssl*

    创建一个证书目录

    mkdir -p /opt/certs

    sudo sh -c "cfssl print-defaults config > config.json"  # 生成一个配置模板(这个步骤可以省略)

    sudo sh -c " cfssl print-defaults csr > ca-csr.json"  # 生成证书信息文件

    创建文件  /opt/certs/ca-csr.json

    -------------增加内容--------------------------

    {
        "CN": "Cdbaidu",
        "hosts": [
        ],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "L": "Chengdu",
                "ST": "Chengdu",
                "O": "od",
                "OU": "ops"
            }
        ],
        "ca": {
            "expiry": "175200h"  # 20年
        }
    }

    签发生产字签证证书

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

    ca-csr.json # 上面编辑的文件名

    ca 前缀

    管道后面的是生产.pem文件

    部署docker环境

    HDSS7-200(192.168.27.105)

    HDSS7-21(192.168.27.103)

    HDSS7-22(192.168.27.104)

    一条命令安装Docker环境

    sh -c "curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun"

    查看docker版本

    配置参数

    sudo vim /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": "172.7.21.1/24",  # 这里根据自己HDSS7-21,设置了172.7.21.1/24方便记忆和排错
        "exec-opts": ["native.cgroupdriver=systemd"],
        "live-restore": true
    }

    sudo systemctl start docker # 启动docker服务

    检查三台是否都已经成功配置docker引擎

    docker version

    部署docker私有镜像仓库

    HDSS7-200(192.168.27.105)

    barbor 官方github地址

    下载完毕后进行解压 

    tar xf harbor-offline-installer-v2.0.1.tgz -C /opt/

    mv harbor harbor-v2.0.1  # 增加版本号备注

    ln -s /opt/harbor-v2.0.1/ /opt/harbor  # 创建软链接便于以后升级

    PS:harbor 依赖 docker-compose

    yum install docker-compose -y

    sudo mkdir -p /data/harbor/logs  # 如果修改了日志存放目录需要创建对应目录

    修改配置文件

    cp /opt/harbor/harbor.yml.tmpl /opt/harbor/harbor.yml # 把模板文件变成正式的配置文件

    ----------------修改下面内容------------------------

    http:
    port: 180

    hostname: harbor.od.com

    harbor_admin_password: Harbor12345  # 生产环境自行修改

    database:
    password: root123  # 生产环境自行修改

    data_volume:/data/harbor

    location:/data/harbor/logs

    开始执行harbor 脚本

    /opt/harbor/install.sh

    Note:遇到报错

    ERROR:root:Error: The protocol is https but attribute ssl_cert is not set

    方法一: 可以在配置文件里面注释掉和443相关部分

     方法二:配置相关https的证书认证

    https://www.cnblogs.com/Dev0ps/p/10566398.html

    脚本执行成功,如下提示:

     进行自检,输入  sudo docker-compose ps

    看到harbor 给我们拉取和启用的各种镜像

    安装Nginx

    yum install nginx -y 

    创建配置文件

    /etc/nginx/conf.d/harbor.od.com.conf

    ------------新增如下内容------------

    server {
        listen        80;
        server_name   harbor.od.com;
    
        client_max_body_size 1000m;
    
        location / {
            proxy_pass http://127.0.0.1:180;
        }
    }

    检测nginx配置文件语法是否正常

    sudo nginx -t

    启动nginx

    systemctl start nginx

    systemctl enable nginx

    PS: 这里为了方便,需要在HDSS7-11(192.168.27.101)添加一条dns记录.

    vi /var/named/od.com.zone

    -----------------修改和添加内容(见黄底红字处)----------------------

    $ORIGIN od.com.
    $TTL 600        ; 10 minutes
    @       IN SOA  dns.host.com. dnsadmin.od.com. (
                                    2020071002    ; 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.27.101
    harbor                  A    192.168.27.105

    systemctl restart named

    添加后进行测试,DNS是否成功

    dig -t A harbor.od.com +short

    使用客户端访问:

    http://harbor.od.com:180/  # 看到如下界面

    Harbor 页面操作 

    账号密码登陆--新建项目

    # 在HDSS7-200(192.168.27.105)下载一个公网镜像

    sudo docker pull nginx:1.7.9

    docker tag <IMAGE ID > harbor.od.com/public/nginx:v.17.9 # 给公网镜像打一个tag

    docker push harbor.od.com/public/nginx:v1.7.9  # 尝试推送到我们自己的私有仓库

    Note: 错误提示

    unauthorized: unauthorized to access repository: public/nginx, action: push: unauthorized to access repository: public/nginx, action: push

    原因是需要登陆你的私有仓库,不然没有授权网上传。

    docker login harbor.od.com

    输入你私有仓库的账号密码,Push成功

    部署Master节点服务

    部署etcd集群

    集群规划

    HDSS7-12    角色:etcd lead      192.168.27.102

    HDSS7-21    角色:etcd follow    192.168.27.103

    HDSS7-22    角色:etcd follow    192.168.27.104

    创建基于根证书的config配置文件

    HDSS7-200(27.105)上 /opt/certs/

    vim /opt/certs/ca-config.json 

    -----------------------新增以下内容------------------------------

     1 {
     2     "signing": {
     3         "default": {
     4             "expiry": "1725200h"
     5         },
     6         "profiles": {
     7             "server": {
     8                 "expiry": "1725200h",
     9                 "usages": [
    10                     "signing",
    11                     "key encipherment",
    12                     "server auth"
    13                 ]
    14             },
    15             "client": {
    16                 "expiry": "1725200h",
    17                 "usages": [
    18                     "signing",
    19                     "key encipherment",
    20                     "client auth"
    21                 ]
    22             },
    23             "peer": {
    24                 "expiry": "1725200h",
    25                 "usages": [
    26                     "signing",
    27                     "key encipherment",
    28                     "server auth",
    29                     "client auth"
    30                 ]
    31             }
    32         }
    33     }
    34 }

    创建etcd-peer-csr文件

    vim etcd-peer-csr.json

    ------------新增以下内容-----------------------

     1 {
     2     "CN": "k8s-etcd",
     3     "hosts": [
     4         "192.168.27.101",
     5         "192.168.27.102",
     6         "192.168.27.103",
     7         "192.168.27.104"
     8     ],
     9     "key": {
    10         "algo": "rsa",
    11         "size": 2048
    12     },
    13     "names": [
    14         {
    15             "C": "CN",
    16             "ST": "beijing",
    17             "L": "beijing",
    18             "O": "od",
    19             "OU": "ops"
    20         }
    21     ]
    22 }

     签发证书 

    依然保持/opt/crets目录下(确保上面2个文件已经创建成功)

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json

    # 产生签发证书文件

    sudo cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json | sudo cfssl-json -bare etcd-peer

     

    回到节点:HDSS7-12(27.102)上 

    创建用户

    useradd -s /sbin/nologin -M etcd

    -M 没有家目录

    下载etcd的软件

    etcd下载地址

    # 教程里面推荐不超过3.3.x的版本

    tar zxvf etcd-v3.x.x-linux-amd64.tar.gz -C /opt

    cd /opt

    ln -s /opt/etcd-v3.x.x /opt/etcd  

    创建etcd的证书存放目录 

    sudo mkdir -p /opt/etcd/certs /data/etcd /data/logs/etcd-server

    # 拷贝上面生成的证书到/opt/etcd/certs 下面

    给etcd目录授权权限 

    chown -R etcd.etcd /opt/etcd-v3.1.20/

    chown -R etcd.etcd /data/etcd

    chown -R etcd.etcd /data/logs/etcd-server/

    创建一个etcd的脚本

    /opt/etcd/etcd-server-startup.sh

    chmod +x /opt/etcd/etcd-server-startup.sh 

    -------------------添加如下内容--------------------------

     1 #!/bin/sh
     2 ./etcd --name etcd-server-7-12 
     3        --data-dir /data/etcd/etcd-server 
     4        --listen-peer-urls https://192.168.27.102:2380 
     5        --listen-client-urls https://192.168.27.102:2379,http://127.0.0.1:2379 
     6        --quota-backend-bytes 8000000000 
     7        --initial-advertise-peer-urls https://192.168.27.102:2380 
     8        --advertise-client-urls https://192.168.27.102:2379,http://127.0.0.1:2379 
     9        --initial-cluster etcd-server-7-12=https://192.168.27.102:2380,etcd-server-7-21=https://192.168.27.103:2380,etcd-server-7-22=https://192.168.27.104:2380 
    10        --ca-file ./certs/ca.pem 
    11        --cert-file ./certs/etcd-peer.pem 
    12        --key-file ./certs/etcd-peer-key.pem 
    13        --client-cert-auth 
    14        --trusted-ca-file ./certs/ca.pem 
    15        --peer-ca-file ./certs/ca.pem 
    16        --peer-cert-file ./certs/etcd-peer.pem 
    17        --peer-key-file ./certs/etcd-peer-key.pem 
    18        --peer-client-cert-auth 
    19        --peer-trusted-ca-file ./certs/ca.pem 
    20        --log-output stdout

    # 安装一个辅助工具(用于让脚本自动运行,如果脚本停止自动启动)

    yum install supervisor -y

    systemctl start supervisord

    systemctl enable supervisord

    设置supervisor启动设置文件

    vim /etc/supervisord.d/etcd-server.ini

    -------------------添加下面内容------------------------

     1 [program: etcd-server-7-12]
     2 command=/opt/etcd/etcd-server-startup.sh
     3 numprocs=1
     4 directory=/opt/etcd 
     5 autostart=true 
     6 autorestart=true 
     7 startsecs=30
     8 startretries=3
     9 exitcodes=0,2
    10 stopsignal=QUIT
    11 stopwaitsecs=10
    12 user=etcd
    13 redirect_stderr=true
    14 stdout_logfile=/data/logs/etcd-server/etcd.stdout.1og
    15 stdout_logfile_maxbytes=64MB
    16 stdout_logfile_backups=4
    17 stdout_capture_maxbytes=1MB
    18 stdout_events_enabled=false

    开始操作supervisor

    supervisorctl update

    supervisorctl status

    # 查看启动日志

    tail -fn 200 /data/logs/etcd-server/etcd.stdout.1og

    # 查看端口是否正常开启

    sudo netstat -luntp |grep etcd

    PS:3个节点都按照上面配置,注意标黄部分自己需要修改。

    检查集群的健康状态

    进入任意节点目录/opt/etcd/下,执行

    ./etcdctl cluster-health 

    ./etcdctl member list  # 通过这个命令可以查看到当前集群的leader

     部署kube-apiserver集群

    HDSS7-21(27.103)

    HDSS7-22(27.104)

    这里部署以HDSS7-21 为例,另外一台配置相同

    kubernetes 官方github地址 

    kubernetes下载地址 

    v1.15.2   v1.18.5

    tar xf kubernetes-server-linux-amd64-v1.18.5.tar.gz -C /opt

    cd /opt

    mv kubernetes-server-linux-amd64 kubernetes-v1.18.5

    ln -s kubernetes-v1.18.5 kubernetes

    清理二进制安装无用包(可选)

    /opt/kubernets/kubernetes-src.tar.gz  # go语言源码包

    /opt/kubernetes/server/bin 下面所有tar包和_tag(docker镜像)

  • 相关阅读:
    vim内外部鼠标复制 粘贴
    nginx 问题解决nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    Installation of the latest version of netease-cloud-music on Fedora 30 linux platform
    Linux就该这么学11学习笔记
    Linux就该这么学10学习笔记
    css day2
    Linux就该这么学09学习笔记
    Linux就该这么学08学习笔记
    css day1
    Linux就该这么学07学习笔记
  • 原文地址:https://www.cnblogs.com/Cong0ks/p/13267368.html
Copyright © 2011-2022 走看看