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 

原文地址:https://www.cnblogs.com/wu-wu/p/14126928.html