zoukankan      html  css  js  c++  java
  • kubernates部署(二进制包部署方式)

    1、系统初始化

      1.1 关闭防火墙:

        $ systemctl stop firewalld

        $ systemctl disable firewalld

      1.2 关闭 selinux:

        $ sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久

        $ setenforce 0 # 临时
      1.3 关闭 swap:

        $ swapoff -a   # 临时

        $ sed -ri 's/.*swap.*/#&/' /etc/fstab   # 永久

      1.4 主机名:

        $ hostnamectl set-hostname <hostname>

      1.5 在 master 添加 hosts:

        $ vi /etc/hosts

        192.168.31.61 k8s-master 

        192.168.31.62 k8s-node1 

        192.168.31.63 k8s-node2

      1.6 将桥接的 IPv4 流量传递到 iptables 的链:    

    $ cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF

        $ sysctl --system # 生效

      1.7 时间同步:

        $ yum install ntpdate -y

        $ ntpdate time.windows.com

    2、部署Ercd集群

      2.1 准备 cfssl 证书生成工具  

        # wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

        # wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

        # wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

        # chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64

        # mv cfssl_linux-amd64 /usr/local/bin/cfssl

        # mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

        # mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

      2.2 生成 Etcd 证书

        # cd  /usr/local/bin/

        # mkdir -p /usr/local/bin/TLS/{etcd,k8s}

        # cd TLS/etcd  

    # cat > ca-config.json<< EOF

    {
    "signing": {
    "default": {
    "expiry": "87600h"
    },
    "profiles": {
    "www": {
    "expiry": "87600h",
    "usages": [
    "signing",
    "key encipherment",
    "server auth",
    "client auth"
    ]
    }
    }
    }
    }
    EOF

    #cat > ca-csr.json<< EOF

    {
    "CN": "etcd CA",
    "key": {
    "algo": "rsa",
    "size": 2048
    },
    "names": [
    {
    "C": "CN",
    "L": "Beijing",
    "ST": "Beijing"
    }
    ]
    }
    EOF

        # cfssl gencert -initca ca-csr.json | cfssljson -bare ca -   # 生成证书

        # ls *pem   # 查看生成证书

    # cat > server-csr.json<< EOF
    {
    "CN": "etcd",
    "hosts": [
    "192.168.1.106",
    "192.168.1.109",
    "192.168.1.108"
    ],
    "key": {
    "algo": "rsa",
    "size": 2048
    },
    "names": [
    {
    "C": "CN",
    "L": "BeiJing",
    "ST": "BeiJing"
    }
    ]
    }
    EOF
    # 添加
    server-csr.json 文件

        # cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

      2.3 从 Github 下载二进制文件

        下载地址:https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz

      2.4 部署 Etcd 集群

        # mkdir /opt/etcd/{bin,cfg,ssl} –p

        # tar zxvf etcd-v3.4.9-linux-amd64.tar.gz

        # mv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/

    #创建 etcd 配置文件
    # cat > /opt/etcd/cfg/etcd.conf << EOF
    #[Member]
    ETCD_NAME="etcd-1"
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="https://192.168.1.106:2380"
    ETCD_LISTEN_CLIENT_URLS="https://192.168.1.106:2379"
    #[Clustering]
    ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.1.106:2380"
    ETCD_ADVERTISE_CLIENT_URLS="https://192.168.1.106:2379"
    ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.1.106:2380,etcd-
    2=https://192.168.1.108:2380,etcd-3=https://192.168.1.109:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_INITIAL_CLUSTER_STATE="new"
    EOF
    # 字段解释
    ETCD_NAME:节点名称,集群中唯一
    ETCD_DATA_DIR:数据目录
    ETCD_LISTEN_PEER_URLS:集群通信监听地址
    ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
    ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址
    ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
    ETCD_INITIAL_CLUSTER:集群节点地址
    ETCD_INITIAL_CLUSTER_TOKEN:集群 Token
    ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new 是新集群,existing 表示加入
    已有集群
    # systemd 管理 etcd
    # cat > /usr/lib/systemd/system/etcd.service << EOF [Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service] Type=notify EnvironmentFile=/opt/etcd/cfg/etcd.conf ExecStart=/opt/etcd/bin/etcd --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --peer-cert-file=/opt/etcd/ssl/server.pem --peer-key-file=/opt/etcd/ssl/server-key.pem --trusted-ca-file=/opt/etcd/ssl/ca.pem --peer-trusted-ca-file=/opt/etcd/ssl/ca.pem --logger=zap Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF

        # cp /usr/local/bin/TLS/etcd/ca*pem /usr/local/bin/TLS/etcd/server*pem /opt/etcd/ssl/   # 拷贝刚才生成的证书

        # scp -r /opt/etcd/ root@192.168.1.108:/opt/    # 将上面节点 1 所有生成的文件拷贝到其他节点

        # scp /usr/lib/systemd/system/etcd.service root@192.168.1.108:/usr/lib/systemd/system/

    # 在node节点分别修改 etcd.conf 配置文件中的节点名称和当前服务器 IP
    # vi /opt/etcd/cfg/etcd.conf #[Member] ETCD_NAME="etcd-1" # 修改此处,节点 2 改为 etcd-2 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.31.71:2380" # 修改此处为当前服务器 IP ETCD_LISTEN_CLIENT_URLS="https://192.168.31.71:2379" # 修改此处为当前服务器 IP #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.71:2380" # 修改此处为当前 服务器 IP ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.71:2379" # 修改此处为当前服务器 IP ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.31.71:2380,etcd- 2=https://192.168.31.72:2380,etcd-3=https://192.168.31.73:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"

        # 最后将所有服务器重启

        # systemctl daemon-reload

        # systemctl start etcd

        # systemctl enable etcd

        # 查看集群情况

        # ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.1.106:2379,https://192.168.1.108:2379,https://192.168.1.109:2379" endpoint health

     3、安装docker

      # wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

      # tar zxvf docker-19.03.9.tgz

      # mv docker/* /usr/bin

    # systemd 管理 docker
    # cat > /usr/lib/systemd/system/docker.service << EOF
    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service
    Wants=network-online.target
    [Service]
    Type=notify
    ExecStart=/usr/bin/dockerd
    ExecReload=/bin/kill -s HUP $MAINPID
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    TimeoutStartSec=0
    Delegate=yes
    KillMode=process
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
    [Install]
    WantedBy=multi-user.target
    EOF

      # mkdir /etc/docker    # 创建配置文件

    # cat > /etc/docker/daemon.json << EOF
    {
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    EOF

      # systemctl daemon-reload

      # systemctl start docker

      # systemctl enable docker

    4、部署Master  Node

    4.1 生成 kube-apiserver 证书

      # cd /usr/local/bin/TLS/k8s

    cat > ca-config.json<< EOF
    {
    "signing": {
    "default": {
    "expiry": "87600h"
    },
    "profiles": {
    "kubernetes": {
    "expiry": "87600h",
    "usages": [
    "signing",
    "key encipherment",
    "server auth",
    "client auth"
    ]
    }
    }
    }
    }
    EOF
    cat > ca-csr.json<< EOF
    {
    "CN": "kubernetes",
    "key": {
    "algo": "rsa",
    "size": 2048
    },
    "names": [
    {
    "C": "CN",
    "L": "Beijing",
    "ST": "Beijing",
    "O": "k8s",
    "OU": "System"
    }
    ]
    }
    EOF

      # cfssl gencert -initca ca-csr.json | cfssljson -bare ca -  # 生成证书

      # ls *pem

    # 使用自签 CA 签发 kube-apiserver HTTPS 证书
    cat > server-csr.json<< EOF
    {
    "CN": "kubernetes",
    "hosts": [
    "10.0.0.1",
    "127.0.0.1",
    "192.168.1.106",
    "192.168.1.108",
    "192.168.1.109",
    "kubernetes",
    "kubernetes.default",
    "kubernetes.default.svc",
    "kubernetes.default.svc.cluster",
    "kubernetes.default.svc.cluster.local"
    ],
    "key": {
    "algo": "rsa",
    "size": 2048
    },
    "names": [
    {
    "C": "CN",
    "L": "BeiJing",
    "ST": "BeiJing",
    "O": "k8s",
    "OU": "System"
    }
    ]
    }
    EOF

      # cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server   # 生成证书

      # ls server*pem

    4.2 从 Github 下载二进制文件

      https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.9.md#server-binaries

      # mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

      # tar zxvf kubernetes-server-linux-amd64.tar.gz

      # cd kubernetes/server/bin

      # cp kube-apiserver kube-scheduler kube-controller-manager /opt/kubernetes/bin

      # cp kubectl /usr/bin/

    4.3、 部署 kube-apiserver

    # cat > /opt/kubernetes/cfg/kube-apiserver.conf << EOF
    KUBE_APISERVER_OPTS="--logtostderr=false \
    --v=2 \
    --log-dir=/opt/kubernetes/logs \
    --etcd-
    servers=https://192.168.1.106:2379,https://192.168.1.108:2379,https://192.168.1
    .109:2379 \
    --bind-address=192.168.1.106 \
    --secure-port=6443 \
    --advertise-address=192.168.1.106 \
    --allow-privileged=true \
    --service-cluster-ip-range=10.0.0.0/24 \
    --enable-admission-
    plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestric
    tion \
    --authorization-mode=RBAC,Node \
    --enable-bootstrap-token-auth=true \
    --token-auth-file=/opt/kubernetes/cfg/token.csv \
    --service-node-port-range=30000-32767 \
    --kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \
    --kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \
    --tls-cert-file=/opt/kubernetes/ssl/server.pem \
    --tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
    --client-ca-file=/opt/kubernetes/ssl/ca.pem \
    --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
    --etcd-cafile=/opt/etcd/ssl/ca.pem \
    --etcd-certfile=/opt/etcd/ssl/server.pem \
    --etcd-keyfile=/opt/etcd/ssl/server-key.pem \
    --audit-log-maxage=30 \
    --audit-log-maxbackup=3 \
    --audit-log-maxsize=100 \
    --audit-log-path=/opt/kubernetes/logs/k8s-audit.log"
    EOF

    # 字段解释
    –logtostderr:启用日志
    —v:日志等级
    –log-dir:日志目录
    –etcd-servers:etcd 集群地址
    –bind-address:监听地址
    –secure-port:https 安全端口
    –advertise-address:集群通告地址
    –allow-privileged:启用授权
    –service-cluster-ip-range:Service 虚拟 IP 地址段
    –enable-admission-plugins:准入控制模块
    –authorization-mode:认证授权,启用 RBAC 授权和节点自管理
    –enable-bootstrap-token-auth:启用 TLS bootstrap 机制
    –token-auth-file:bootstrap token 文件
    –service-node-port-range:Service nodeport 类型默认分配端口范围
    –kubelet-client-xxx:apiserver 访问 kubelet 客户端证书
    –tls-xxx-file:apiserver https 证书
    –etcd-xxxfile:连接 Etcd 集群证书
    –audit-log-xxx:审计日志

      # cp /usr/local/bin/TLS/k8s/ca*pem /usr/local/bin/TLS/k8s/server*pem /opt/kubernetes/ssl/

    # 创建配置文件中 token 文件
    # cat > /opt/kubernetes/cfg/token.csv << EOF
    c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node-bootstrapper"
    EOF
    # systemd 管理 apiserver
    cat > /usr/lib/systemd/system/kube-apiserver.service << EOF [Unit] Description=Kubernetes API Server Documentation=https://github.com/kubernetes/kubernetes [Service] EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.conf ExecStart=/opt/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS Restart=on-failure [Install] WantedBy=multi-user.target EOF

      # systemctl daemon-reload

      # systemstemctl status kube-apiserver.service   # 查看启动情况

    systemctl status kube-apiserver.service 

  • 相关阅读:
    前端备战21秋招之操作系统,线程/进程/死锁
    前端备战秋招之计算机网络,这一篇足矣
    VS Code项目中共享自定义的代码片段方案
    eslint插件开发教程
    2020前端春招经验分享,从面试小白到老油条的蜕变
    使用nodejs从控制台读入内容
    js实现展开多级数组
    js使用typeof与instanceof相结合编写一个判断常见变量类型的函数
    07-数据结构
    06-流程控制
  • 原文地址:https://www.cnblogs.com/wu-wu/p/14126928.html
Copyright © 2011-2022 走看看