总结:部署并生成证书,生成证书,分发证书,下载并复制软件包到节点,复制相应脚本到目录。
1.集群机器
linux-node1: 192.168.56.11 ---主部署服务:etcdkube [ k4 ]apiserverkube-controller-managerkube-schedulerdockerlinux- ]node2:192.168.56.12 ---部署在节点上的服务:etcdkubeletkube-proxydockerlinux-node3 :192.168.56.13 --部署在-节点的服务:etcdkubeletkube-proxydocker
2.环境准备
1. 设置主机名 hostnamectl set-主机名 linux[ k4]node1hostnamectl set-主机名 linux-node2hostnamectl set-主机名 linux-node3----[ k4] [ k4]----2。 设置从部署节点到所有其他节点(包括本机)的SSH无密码登录 [root@linux-node1 ~]# ssh-keygen -t rsa[root@linux - node1 ~ ]# ssh-copy-id linux-node1[root@linux-node1 ~]# ssh-copy-id linux-node2[root@linux -node1 ~]# ssh-复制-id linux-node3---------- 3. 主机 hostcat > /etc/hosts </dev/null 2>&1#vim /etc/profile exportt PS1="[e]0;a][e[1;32m][e[1;33m]H[e[1;35m] [e[32m]w[e[0m]u>$ "#设置时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#SSH登录慢 sed [ k4 ]i "s /#UseDNS yes/UseDNS no/" /etc/ssh/sshd_configsed -i "s/GSSAPIAuthentication yes/GSSAPIAuthentication no/" /etc/ssh/sshd_configsystemctl restart sshd.service
三、正式安装1. 安装Docker(3台机器必须都工作)
第一步:使用国内Docker源码 cd /etc/yum.repos.d/wget https://mirrors.aliyun.com/docker[k4 ] ce/linux/centos/docker-ce.repo 第 2 步:安装 Docker yum install -y docker-ce 第 3 步:启动后台进程 [ root@linux -node2 ~]# systemctl start docker [ root@linux-node2 ~]# systemctl enable docker /etc/systemd/system/multi-user.target.wants/docker.service from /usr 我创建了一个到 /lib/systemd/system/docker 的符号链接。服务。
2.安装k8s
1. 准备部署目录[root@linux-node1 ~]# mkdir -p /opt/kubernetes/{cfg,bin,ssl,log}#添加环境变量 [root@linux-node1 ~]# echo "PATH=$ PATH :/opt/kubernetes/bin" >> /etc/profile[root@linux-node1 ~]# Source /etc/profile 或 [root@linux-node1 ~]# vim .bash_profilePATH=$PATH: $ HOME/bin:/opt/kubernetes/bin[root@linux-node1 ~]# 源 .bash_profile2。 准备软件包 #github下载链接 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#server-binarieswget https://storage.googleapis.com/kubernetes [k4 ]release/release/v1.10.8/kubernetes-server-linux-amd64.tar.gzwget https://storage.googleapis.com/kubernetes-release/release/v1.10.8/kubernetes[ k4] ]client-linux-amd64.tar.gzwget https://storage.googleapis.com/kubernetes -release/release/v1.10.8/kubernetes-node-linux- amd64。 tar.gzwget https://storage.googleapis.com/kubernetes-release/release/v1.10.8/kubernetes.tar.gz3。 解压软件包 tar -zxvf kubernetes.tar.gz -C /usr/local/src /tar -zxvf kubernetes-server-linux-amd64.tar.gz [ k4] C /usr/local/src/tar -zxvf kubernetes-client-linux-amd64.tar.gz -C /usr/local/src/tar -zxvf kubernetes[ k4] node-linux-amd64.tar.gz -C /usr/local/src/
3. 手动创建 CA 证书(仅在 master 上)
1. 安装 CFSSL [root@linux-node1 ~]# cd /usr/local/ src[root@linux-node1 src]# wget https://pkg.cfssl.org /R1.2/cfssl_linux[ k4] amd64[root@linux-node1 src]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64[root@linux-node1 src ]# wget https:// pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64[root @linux-node1 src]# chmod +x cfssl*[root@linux-node1 src]# mv cfssl-certinfo_linux-amd64 /opt/kubernetes/bin/cfssl-certinfo[root@linux-node1 src]# mv cfssljson_linux-amd64 /opt/kubernetes/bin/cfssljson[root@linux ] -node1 src]# mv cfssl_linux-amd64 /opt/kubernetes/bin/cfssl#cfssl 将命令文件复制到 k8s-node1 和 k8s-node2 节点。 如果您实际上有多个节点,则需要同步复制它们。 [root@linux-node1 ~]# scp /opt/kubernetes/bin/cfssl* 192.168.56.12:/opt/kubernetes/bin[root@linux-node1 ~]# scp /opt/kubernetes/bin/ cfssl* 192.168.56.13:/opt/kubernetes/bin2。初始化 cfssl[root@linux-node1 src]# mkdir ssl && cd ssl[root@linux-node1 ssl]# cfssl print-defaults config > config.json -- 生成 ca-config.json 的示例(可选) [root@linux-node1 ssl]# cfssl print-defaults csr > csr.json -[ k4 ]生成ca-csr.json示例(可选) 3.创建用于CA文件生成的JSON配置文件 [root@linux-node1 ssl]#cat > ca-confg.json < ca-csr.json <<EOF{ "CN": "kubernetes", "key": { "algo": "rsa", "size":第2048章}EOF5。 生成 CA 证书 (ca.pem) 和密钥 (ca-key.pem) [root@ linux-node1 ssl]# cfssl gencert -initca ca-csr.json | cfssljson [ k4]bare ca -#运行上述命令将产生以下结果三个文件 ca.csr ca-key.pem ca.pem[root@ linux-node1 ssl]# ls -l ca*-rw-r--r[ k4 ]- 1 root root 290 三月 4 日 13:45 ca-config.json-rw-r--r-- 1 root root 1001 三月 4 日 14:09 ca.csr-rw-r--r-- 1根根208年3月4日13:51 ca-csr.json-rw -- ----- 1 根 1679 年 3 月 4 日 14:09 ca-key.pem-rw-r- -r- [ k4] 1根根1359年3月4日14:09 ca.pem6。 分发证书 [root@linux-node1 ssl]# cp ca.csr ca.pem ca-key.pem ca-config.json /opt/kubernetes/ssl#SCP 证书 k8s- 发送到 node1和 k8s-node2 节点 [root@linux-node1 ssl]# scp ca.csr ca.pem ca-key.pem ca-config.json 192.168.56.12:/opt/kubernetes/ssl[ root @linux-node1 ssl]# scp ca.csr ca.pem ca-key.pem ca-config.json 192.168.56.13: /opt/kubernetes/ssl
4.手动部署ETCD集群
0。 准备etcd软件包 wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux- amd64.tar.gz[root@linux[ k4] ]node1 src]# tar zxf etcd-v3.2.18-linux-amd64.tar.gz[root@linux-node1 src]# cd etcd -v3.2.18- linux[ k4]amd64[root@linux-node1 etcd-v3.2.18-linux-amd64]# cp etcd etcdctl /opt/kubernetes/bin/ [ root@linux-node1 etcd[ k4] v3.2.18-linux-amd64]# scp etcd etcdctl 192.168.56.12:/opt/kubernetes/bin/[root@linux-node1 etcd- v3.2.18-linux[k4 ]amd64 ]# scp etcd etcdctl 192.168.56.13:/opt/kubernetes/bin/1. 创建etcd证书签名请求: [root@linux-node1]# cd /usr/local /src/sslcat > etcd-csr.json <<EOF{ "CN": "etcd", "hosts": [ "127.0.0.1", "192.168.56.11", "192.168.56.12", "192.168.56.13" ], "key": { "algo": "rsa","大小": 2048 }, "名称": [ { "C": "CN", "ST": "北京", "L": "北京", "O": "k8s", "OU": "系统" } ]}EOF2. 生成etcd证书和私钥: [root@linux-node1 ssl]# cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem -ca-key =/opt /kubernetes/ ssl /ca-key.pem -config=/opt/kubernetes/ssl/ca-config.json -profile=kubernetes etcd-csr.json | cfssljson [ k4]bare etcd 生成以下证书文件: [root@k8s-master ~]# ls -l etcd*-rw-r--r-[k4 ] 1 root root 1045 Mar 5 11 :27 etcd.csr-rw-r--r-- 1 root root 257 Mar 5 11:25 etcd-csr .json - rw-[ k4]----- 1根根1679年3月5日11:27 etcd-key.pem-rw-r--r[k4 ]- 1根根1419年3月5日11:27 etcd.pem3。 将证书移动到 /opt/kubernetes/ssl 目录 [root@k8s-master ~]# cp 等。d*.pem /opt/kubernetes/ssl[root@linux-node1 ~]# scp etcd*.pem 192.168.56.12:/opt/kubernetes/ssl[root@linux-node1 ~]# scp etcd* .pem 192.168.56.13:/opt/kubernetes/ssl[root@k8s-master ~]# rm -f etcd.csr etcd-csr.json4。 配置ETCD配置文件 [root@linux- node1 ~]# vim /opt/kubernetes/cfg/etcd.conf#[member]ETCD_NAME="etcd-node1"ETCD_DATA_DIR="/var/lib/etcd" #ETCD_SNAPSHOT_COUNTER =“10000”#ETCD_HEARTBEAT_INTERVAL =“100”#ETCD_ELECTION_TIMEOUT =“1000”ETCD_LISTEN_PEER_URLS =“https://192.168.56.11:2380”ETCD_LISTEN_CLIENT_URLS =“https://192.168.56.11:23 79, 12 7.0.0.1 :2379"#ETCD_MAX_SNAPSHOTS="5"#ETCD_MAX _WALS="5"#ETCD_CORS=""#[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.56.11:2380"#另一个 ETCD_NAME (例如 test ),设置# 该名称的 ETCD_INITIAL_CLUSTER 值。 换句话说,“test=http://..."ETCD_INITIAL_CLUSTER="etcd-node1=https://192.168.56.11:2380,etcd-node2=https://192.168.56.12:2380,etcd-node3 =https://192.168.56.13:2380"ETCD_INITIAL_CLUSTER_STATE="新"ETCD_INITIAL_CLUSTER_TOKEN="k8s-etcd-集群"ETCD_ADVERTISE_CLIENT_URLS="https://192.168.56.11:2379"#[security]CLIENT_CERT_AUTH="true “ETCD_CA_FILE =”/opt/kubernetes/ssl/ca.pem“ETCD_CERT_FILE =”/opt/kubernetes/ssl/etcd.pem“ETCD_KEY_FILE =”/opt/kubernetes/ssl/etcd-key.pem“PEER_CLIENT_CERT_AUTH =” true"ETCD_PEER_CA_FILE="/opt/kubernetes/ssl/ca.pem"ETCD_PEER_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"ETCD_PEER_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"5.创建ETCD系统服务 [root@linux-node1 ~]# vim /etc/systemd/system/etcd.service[Unit]Description=Etcd ServerAfter=network.target[Service]Type=simpleWorkingDiDirectory=/var/lib/etcdEnvironmentFile=-/opt/kubernetes/cfg/etcd.conf# 将 GOMAXPROCS 设置为处理器数量ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /opt/ kubernetes/ bin/etcd"Type=notify[Install]WantedBy=multi-user.target6. 同步文件到其他节点(并更改差异) [root@linux-node1 ~] # scp /opt/kubernetes/ cfg/etcd .conf 192.168.56.12:/opt/kubernetes/cfg/[root@linux-]node1 ~]# scp /etc/systemd/system/etcd.service 192.168.56.12:/etc/systemd/system/[ root@ linux-node1 ~]# scp /opt/kubernetes/cfg/etcd.conf 192.168 .56.13:/opt/kubernetes/cfg/[root@linux-node1 ~]# scp /etc/systemd/system /etcd .service 192.168.56.13:node2 的/etc/systemd/system/#etcd.conf 设置 [ root@linux-node2 ~]# vim /opt/kubernetes/cfg/etcd .conf#[member]ETCD_NAME= "etcd -node2"ETCD_DATA_DIR="/var/lib/etcd"#ETCD_SNAPSHOT_COUNTER="10000"#ETCD_HEARTBEAT_INTERVAL="100"#ETCD_ELECTION_TIMEOUT="1000"ETCD_LISTEN_PEER_URLS="https://192.168.56.12:2380"ETCD_LISTEN_CLIENT_URLS="https://192.168.56.12:2379,https://127.0.0.1:2379"# _ Snapshot ="5"#ETCD_MAX_WALS="5"#ETCD_CORS=""#[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.56.12:2380"# 如果要使用不同的 ETCD_NAME (例如 test), # 设置该名称的 ETCD_INITIAL_CLUSTER 值,即“test=http://...” ETCD_INITIAL_CLUSTER="etcd-node1=https://192.168.56.11:2380,etcd-node2=https: //192.168.56.12 :2380,ETCD -节点3 = https://192.168.56.13:2380“etc_initial_cluster_state =”新“etCd_initial_cluster_token =“K8S - ETCD -集群”ETCD_ADVERTISE_CLIENT_URLS =“https://192.168 .56.12:2379” #[安全]CLIENT_CERT_AU TH =“true”ETCD_CA_FILE =“/opt/kubernetes/ssl/ca.pem”ETCD_CERT_FILE =“/opt/kubernetes/ssl/etcd.pem"ETCD_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"PEER_CLIENT_CERT_AUTH="true"ETCD_PEER_CA_FILE="/opt/kubernetes/ssl/ca.pem"ETCD_PEER_CERT_FILE=" /opt/kubernetes/ssl/etcd.pem"ETCD_PEER_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"#node3 的etcd.conf 设置 [root@linux-node3 ~]# vim /opt /kubernetes/cfg/etcd.conf#[成员]ETCD_NAME="etcd-node3"ETCD_DATA_DIR="/var/lib/etcd"#ETCD_SNAPSHOT_COUNTER="10000"#ETCD_HEARTBEAT_INTERVAL="100"#ETCD_ELECTION_TIMEOUT="1000"ETCD_LISTEN_PEER_URLS =“https://192.168.56.13:2380”ETCD_LISTEN_CLIENT_URLS=“https://192.168.56.13:2379,https://127.0.0.1:2379”#ETCD_MAX_SNAPSHOTS=“5”#ETCD_MAX_WALS=“5”#ETCD_CORS= " "#[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.56.13:2380"# 如果您想使用不同的 ETCD_NAME(例如用于测试),# 设置 ETCD_INITIAL_该名称的 CLUSTER 值,即“test=http://...” ETCD_INITIAL_CLUSTER="etcd-node1=https://192.168.56.11:2380,etcd-node2=https://192.168.56.12 :2380,etcd-node3=https://192.168.56.13:2380"ETCD_INITIAL_CLUSTER_STATE="新"ETCD_INITIAL_CLUSTER_TOKEN="k8s-etcd-集群"ETCD_ADVERTISE_CLIENT_URLS="https://192.168.56.13:2379" #[安全] CLIENT_CERT_AUTH="true" ETCD_CA_FILE="/opt/kubernetes/ssl/ca.pem" ETCD_CERT_FILE="/opt/kubernetes/ssl/etcd.pem" ETCD_KEY_FILE="/opt/kubernetes/ssl/etcd[k4 [ k4]key.pem" 在所有节点上创建etcd存储目录并启动etcd [root@linux-node1 ~]# mkdir /var/lib/etcd[root@linux-node1 ~ ]# systemctl daemon[k4 ]相对oad[root@linux-node1 ~]# systemctl Enable etcd[root@linux-node1 ~]# systemctl restart etcd[root@linux-node1 ~]# systemctl status etcd 您必须运行etcd节点并重复执行以上步骤,直到所有机器上的etcd服务启动。 7、验证集群 [root@linux-node1 ~]# etcdctl --endpoints=https://192.168.56.11:2379 --ca-file=/opt /kubernetes /ssl/ca.pem --cert-file=/opt/kubernetes/ssl/etcd.pem --key-file=/opt/kubernetes/ssl/etcd [k4 ] key.pem cluster-healthmember 435fb0a8da627a4c 健康:https://192.168.56.12:2379member 6566e06d7343e1bb 健康:https://192.168.56.11:2379member ce7b884e428b6c8c 健康:获得成功结果 https://192.16 2013 年 8 月 56 日: 2379 集群健康
部署主节点
部署Kubernetes API服务部署
0 .4]node1 ~]# cd /usr/local/src/kubernetes[root@linux-node1 kubernetes]# cp server/bin/kube-apiserver /opt/kubernetes/bin/[root@linux- node1 kubernetes]# cp server/bin/kube-controller-manager /opt/kubernetes/bin/[root@linux-node1 kubernetes]# cp server/bin/kube-scheduler /opt/kubernetes /bin/1。 创建一个生成 CSR 的 JSON 配置文件 [root@linux-node1 ~]# cd /usr/local/src/ssl[root@linux-node1 src]# vim kubernetes-csr. jsoncat > kubernetes-csr.json <<EOF{ "CN": "kubernetes", "hosts": [ "127.0.0.1", "192.168.56.11", "10.1.0.1", "kubernetes", "kubernetes" “.default”,“kubernetes.default.svc”,“kubernetes.default.svc.cluster”,“kubernetes.default.svc.cluster.local”],“key”:{“algo”:“rsa”,“大小": 2048 }, "名称": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "k8s", "OU": "System" } ]}EOF2. 生成 Kubernetes 证书和私钥 [root@linux-node1 src] # cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem -ca-key=/opt/kubernetes/ssl/ca-key.pem -config=/opt/kubernetes/ssl/ ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes#运行上述命令会生成以下两个文件 kubernetes[k4 ]key.pem kubernetes.pem[ root @linux-node1 src]# cp kubernetes*.pem /opt/kubernetes/ssl/[root@linux-node1 ~]# scp kubernetes*.pem 192.168.56.12: /opt/kubernetes/ssl/[ root @linux-node1 ~]# scp kubernetes*.pem 192.168.56.13:/opt/kubernetes/ssl/3.kube-apiserver [root@linux-node1 ~ ] # 创建客户端token文件用于头 -c 16 /dev/urandom | od -An -t x tr -d " "ad6d5bb607a186796d8861557df0d17f |inux-node1 ~]# vim /opt/kubernetes/ssl/bootstrap-token.csvad6d5bb607a186796d8861557df0d17f,kubelet-bootstrap,10001,"system:kubelet-bootstrap" 4. 基本用户名/密码 创建身份验证 [ root@linux-node1 ~]# vim /opt/kubernetes/ssl/basic-auth.csvadmin,admin,1readonly,readonly,25. 部署 Kubernetes API 服务器 [root@linux- node1 ~]# vim /usr/lib/systemd/system/kube-apiserver.service[Unit]Description=Kubernetes API ServerDocumentation=https://github.com/GoogleCloudPlatform /kubernetesAfter=network.target[Service]ExecStart= /opt/ kubernetes /bin/kube-apiserver --admission-control=NamespaceLifecycle、LimitRanger、ServiceAccount、DefaultStorageClass、ResourceQuota、NodeRestriction -[ k4]bind-address=192.168.56.11 - [ k4] 不安全 - 绑定 - 地址 = 127.0.0.1 - - 授权 - 模式 = 节点,RBAC --runtime-config=rbac.authorization.k8s.io/v1 --kubelet-https=true --anonymous-auth=false [ k4]-basic-auth-file=/opt/kubernetes/ssl/basic-auth.csv --启用-bootstrap-token-auth [k4 ] ]-token-auth-file=/opt/kubernetes/ssl/bootstrap-token.csv --service-cluster-ip-range=10.1 。 0.0/16 --服务-节点-端口-范围=20000-40000 --tls-cert-文件=/opt/kubernetes/ssl /kubernetes.pem --tls-private-key-file=/opt/kubernetes/ssl/kubernetes-key.pem --client-ca[ k4]文件=/opt/kubernetes/ssl/ca.pem --服务-帐户-密钥-文件=/opt/kubernetes/ssl/ca-key.pem [k4 ] ]-etcd-cafile=/opt/kubernetes/ssl/ca.pem --etcd-certfile=/opt/kubernetes/ssl/kubernetes.pem --etcd-keyfile=/opt/kubernetes/ssl/kubernetes-key.pem --etcd-servers=https:// /192.168.56.11:2379,https://192.168.56.12:2379,https://192.168.56.13:2379 --启用-swagger-ui=true --允许-privileged=true --audit-log-maxage=30 --audit-log-maxbackup=3 --audit- log-maxsize=100 --audit-log-path=/opt/kubernetes/log/api-audit.log --event-ttl=1h --v=2 --logtostderr=false --log-dir=/opt/kubernetes/logRestart=on-failureRestartSec=5Type=notifyLimitNOFILE=65536[安装] ]WantedBy=multi-user.target6. 启动 API 服务器服务 [root@linux-node1 ~]# systemctl daemon-reload[root@linux-node1 ~]# systemctl 启用 kube [k4 ]apiserver [root@linux-node1 ~]# systemctl start kube-apiserver 显示 API 服务器服务的状态 [root@linux-node1 ~]# systemctl status kube-apiserver
Controller Manager 服务部署
[root@linux-node1 ~]# vim /usr/lib/systemd/system/kube-controller-manager.service[Unit]Description=Kubernetes Controller ManagerDocumentation= https: //github.com/GoogleCloudPlatform/kubernetes[Service]ExecStart=/opt/kubernetes/bin/kube-controller-manager --address=127.0.0.1 --master =http : //127.0.0.1:8080 --分配-节点-cidrs=true --服务-集群-ip-范围=10.1.0.0 /16 --集群-cidr=10.2.0.0/16 --集群-名称=kubernetes --集群-签名-cert-文件= / opt/kubernetes/ssl/ca.pem --集群-签名-密钥-文件=/opt/kubernetes/ssl/ca-key.pem --service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem [ k4]-root-ca-file=/opt/kubernetes/ssl/ca.pem --leader-elect=true --v=2 - -logtostderr=false --log-dir=/opt/kubernetes/logRestart=on-failureRestartSec=5[Install]WantedBy=multi-user.target3。 启动控制器管理器 [root @linux-node1 ~]# systemctl daemon-reload[root@linux-node1 scripts]# systemctl 启用 kube-controller-manager[root@linux- node1 scripts]# systemctl 启动 kube-controller-manager4。 查看服务状态 [root@linux-node1 scripts]# systemctl status kube-controller-manager
部署 Kubernetes 调度器
[root@linux[k4 ] node1 ~]# vim /usr/lib/systemd/system/kube-scheduler.service[unit] 说明=Kubernetes SchedulerDocumentation=https://github.com/GoogleCloudPlatform/kubernetes[Service]ExecStart=/opt/kubernetes/bin/kube-scheduler --address=127.0.0.1 --master =http://127.0.0.1:8080 --leader-elect=true --v=2 --logtostderr=false --log[k4 ] ]dir=/opt/kubernetes/logRestart=on-failureRestartSec=5[Install]WantedBy=multi-user.target2。 部署服务 [root@linux-node1 ~]# systemctl daemon-reload[root@linux-node1scripts]#systemctl 启用 kube-scheduler[root@linux-node1scripts]#systemctlstart kube-scheduler[root@linux-node1 scripts]# systemctl status kube-scheduler
部署kubectl命令行工具
1. 二进制命令包准备 [ root@linux-node1 ~]# cd /usr/local/src/kubernetes/client /bin[root@linux-node1 bin]# cp kubectl /opt/kuberne需要将 tes/bin/#kubectl 复制到你的node节点 [root@linux-node1 bin]# scp /opt/kubernetes/bin/kubectl linux-node2:/opt/kubernetes/bin/[root @ linux-node1 bin]# scp /opt/kubernetes/bin/kubectl linux-node3:/opt/kubernetes/bin/2. 创建管理员证书签名请求 [root@linux-node1 ~]# cd /usr/local/src/ssl/[root@linux-node1 ssl]# cat > admin-csr.json < <EOF { "CN": "admin", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN ", " ST": "北京", "L": "北京", "O": "system:masters", "OU": "系统" } ]}EOF3. 生成管理员证书和私钥: [root@linux-node1 ssl]# cfssl gencert -ca=/opt/kubernetes/ssl/ca .pem -ca-key=/ opt/kubernetes/ ssl /ca-key.pem -config=/opt/kubernetes/ssl/ca-config.json -profile=kubernetes admin-csr.json |n -裸管理[root@linux-node1 ssl]# ls -l admin*-rw-r--r-- 1 root root 1009 Mar 5 12:29 admin.csr-rw-r--r-- 1 root root 229 三月 5 12:28 admin-csr.json-rw[ k4 ] ]------ 1 个 root 1675 年 3 月 5 日 12:29 admin-key.pem-rw-r-[ k4] r -- 1 root root 1399 三月 5 日 12:29 admin.pem[root@linux-node1 src]# mv admin*.pem /opt/kubernetes/ssl/4。 设置集群参数 [root@linux -node1 src]# kubectl config set-cluster kubernetes --certificate-authority=/opt/kubernetes/ssl/ca.pem - - embed-certs=true --server=https://192.168.56.11:6443 集群“kubernetes”集。 5、设置客户端认证参数 [root@linux-node1 src]# kubectl config set-credentials admin [k4 ]-client-certificate=/opt/kubernetes/ssl/admin.pem [ k4] -embed-certs=true --client-key=/opt/kubernetes/ssl/admin-key.pemUser“admin”set.6。 设置上下文参数 [root@linux[ k4]node1 src]# kubectl config set-context kubernetes --cluster=kubernetes --user=adminContext "kubernetes" created.7. 将默认上下文 [root@linux-node1 src]# kubectl config use-context kubernetes 切换为上下文“kubernetes”。 8. 使用 kubectl 工具 [root@linux-node1 ~]# kubectl get csNAME STATUS MESSAGE ERRORcontroller-manager Healthy ok Scheduler Healthy ok etcd-1 Healthy {"health":"true"} etcd - 2 Healthy {"health":"true"} etcd-0 Healthy {"health":"true"}
6. Node 部署节点
kubelet Deploy
1. 准备一个二进制包,用于传输软件包。将 linux-node1 复制到 linux-node2。 [root@linux-node1 ~]# cd /usr/local/src/kubernetes/server/bin/[root@linux-node1 bin]# cp kubelet kube-proxy /opt/kubernetes/bin/ [root@linux-node1 bin]# scp kubelet kube-proxy 192.168.56.12:/opt/kubernetes/bin/[root@linux-node1 bin]# scp kubelet kube-proxy 192.168.56.13 :/opt/kubernetes/bin/2. 创建角色绑定 [root@linux-node1 ~]# kubectl createclusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper [k4 ]-user=kubelet-bootstrapclusterrolebinding " kubelet-bootstrap”已经创建3.创建kubelet bootstrap kubeconfig文件来设置集群参数 [root@linux-node1 ~]# kubectl config set-cluster kubernetes [k4 ] -certificate-authority =/opt/kubernetes/ssl/ca.pem --embed-certs=true --server=https://192。168.56.11:6443 --kubeconfig=bootstrap.kubeconfigCluster 'kubernetes' 已配置。 设置客户端认证参数 [root@linux-node1 ~]# kubectl config set-credentials kubelet-bootstrap [ k4]-token=ad6d5bb607a186796d8861557df0d17f --kubeconfig=bootstrap.kubeconfig 配置用户 " kubelet-引导程序”。 设置上下文参数 [root@linux-node1 ~]# kubectl config set-context default --cluster=kubernetes --user=kubelet-bootstrap - - kubeconfig=bootstrap.kubeconfigContext "default" 创建。选择默认上下文 [root@linux-node1 ~]# kubectl config use-context default --kubeconfig=bootstrap.kubeconfig 切换到上下文 "default" 。 [root@linux-node1 kubernetes]# cp bootstrap.kubeconfig /opt/kubernetes/cfg[root@linux-node1 kubernetes]# scp bootstrap.kubeconfig 192.168.56.12:/opt/kubernetes/cfg[root@linux-node1 kubernetes]# scp bootstrap.kubeconfig 192.168.56.13:/opt/kubernetes/cfg Node 在节点上运行并部署 kubelet 1。 配置CNI支持 [root@linux-node2 ~ ]# mkdir -p /etc/cni/net.d[root@linux-node2 ~]# vim /etc/cni/net.d /10[ k4]default.confcat > /etc/cni/net .d/10-default.conf <0{print $1}"|AGE REQUESTOR CONDITIONnode-csr-IPMSFbKvwgq2icOeIo2v_WA-qb8QCyA7MT5h4eDmjxg 2m kubelet-bootstrap Approved, Issued 运行后检查节点状态是否已就绪 [root@linux-node1 ~ ]# kubectl get nodeNAME STATUS角色年龄版本 192.168.56.12 准备好 2 分钟 v1.10.8
部署 Kubernetes 代理
1. ]y ipvsadm ipset 配置 kube-proxy 以使用 conntrack2。 创建 kube- 代理证书请求 [root@linux-node1 ~]# cd /usr/local/src/ssl/[root@linux-node1 ~]# vim kube-proxy[k4 ] csr .jsoncat > kube-proxy-csr.json < RemoteAddress:端口转发权重 ActiveConn InActConnTCP 10.1.0.1:443 rrpersistent 10800 -> 192.168.56.11:6443 Masq 1 0 0 如果您在两台实验机器上都安装了 kubelet 和代理服务,请使用以下命令检查状态:I will。 [root@linux[ k4 ]node1 ssl]# kubectl get nodeNAME 状态角色年龄 VERSION192.168.56.12 Ready 22m v1.10.1192.168.56.13 Ready 3m v1.10.1linux-node3 节点,自身请使用 进行部署。
7. Flannel部署
1.Flannel [root@linux-node1 ~]# vim flanneld-csr.jsoncat > flanneld-csr 证书生成。 json <<EOF{ "CN": "flanneld", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "北京", "L": "北京", "O": "k8s", "OU": "系统" } ]}EOF2. 生成证书 [root@linux-node1 ~]# cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem -ca-]key=/opt/kubernetes/ssl/ca-key.pem -config=/opt/kubernetes/ssl/ca-config.json -profile=kubernetes flanneld-csr.json | cfssljson - 裸法兰绒 3。 分发证书 [root@linux-node1 ~]# cp flanneld*.pem /opt/kubernetes/ssl/[root@linux-node1 ~]# scp flanneld*.pem 192.168。 56.12:/opt/kubernetes/ssl/[root@linux-node1 ~]# scp flanneld*.pem 192.168.56.13:/opt/kubernetes/ssl/4。 下载Flannel软件包 [root@linux-node1 ~]# cd /usr/local/srcwget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0 .10.0 -linux-amd64.tar.gz[root@linux-node1 src]# tar zxf flannel-v0.10.0-linux-amd64.tar.gz[root@linux - ] ]node1 src]# cp flanneld mk-docker[ k4]opts.sh /opt/kubernetes/bin/linux-node2 复制到节点 [root@linux-node1 src]# scp flanneld mk [k4 ] docker-opts.sh 192.168.56.12:/opt/kubernetes/bin/[root@linux-node1 src]# scp flanneld mk-docker-opts.sh 192.168.56.13:/opt/kubernetes/bin/对应复制脚本复制到 /opt/kubernetes/bin 目录。 [root@linux-node1 ~]# cd /usr/local/src/kubernetes/cluster/centos/node/bin/[root@linux-node1 bin]# cp delete-docker0.sh /opt /kubernetes/bin/[root@linux-node1 bin]# scp 删除-docker0.sh 192.168.56.12:/opt/kubernetes/bin/[root@linux-node1 bin]# scp 删除[k4 ]]docker0.sh 192.168.56.13:/opt/kubernetes/bin/5。 配置 Flannel [root@linux-node1 ~]# vim /opt/kubernetes/cfg/flannelFLANNEL_ETCD="-etcd-endpoints= https://192.168.56.11:2379,https://192.168 .56.12 :2379,https://192.168.56.13:2379"FLANNEL_ETCD_KEY="-etcd-前缀=/kubernetes/network"FLANNEL_ETCD_CAFILE="--etcd-cafile=/opt/kubernetes/ ssl/ca.pem“Flannel_”ETCD_CERTFILE="--etcd-certfile=/opt/kubernetes/ssl/flanneld.pem" FLANNEL_ETCD_KEYFILE="--etcd-keyfile=/opt/kubernetes/ssl/flanneld[ k4]key.pem”配置到其他节点 [root@linux-node1 ~]# scp /opt/kubernetes/cfg/flannel 192.168.56.12:/opt/kubernetes/cfg/[root@linux - Node 1 ~]# scp /opt/kubernetes/cfg/flannel 192.168.56.13:/opt/kubernetes/cfg/6。 设置Flannel系统服务 [root@linux-node1 ~]# vim /usr/lib/systemd/system /flannel.service[Unit]Description=Flanneld 覆盖地址 etcd AgentAfter=network.targetBefore=docker.service[Service ] EnvironmentFile=-/opt/kubernetes/cfg/flannelExecStartPre=/opt/kubernetes/bin/remove- docker0.shExecStart=/opt/kubernetes/bin/flanneld ${FLANNEL_ETCD} ${FLANNEL_ETCD_KEY} ${FLANNEL_ETCD_CAFILE} $ {FLANNEL_ETCD_CERTFILE} ${FLANNEL_ETCD_KEYFILE}ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -d /run/flannel/dockerType=notify[Install]WantedBy=multi-user.targetRequiredBy=docker.service 复制系统服务脚本 scp /usr/lib/systemd/system/flannel.service 192.168.56.12:/usr/lib/systemd/system/scp /usr/lib/systemd/system/flannel.service 192.168.56.13:/usr/lib 等一个在node /systemd/system/Flannel CNI集成 下载CNI插件 [root@linux-node1 ~]# cd /usr/local/srchttps://github.com/containernetworking/plugins/releaseswget https://github.com/systemd/system/Flannel com/containernetworking /plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz[root@linux-node1 ~]# mkdir /opt/kubernetes/ bin/ cni -p[root@linux-node1 src]# tar zxf cni-plugins-amd64-v0.7.1.tgz -C /opt/kubernetes/bin/cniscp [ k4] r /opt /kubernetes/bin/cni 192.168.56.12:/opt/kubernetes/bin/cni/scp -r /opt/kubernetes/bin/cni 192.168.56.13:/opt/kubernetes/bin/cni/创建 Etcd key/opt/kubernetes/bin/etcdctl --ca-file /opt/kubernetes/ssl/ca. --cert- 文件 /opt/kubernetes/ssl/flanneld.pem --key- 文件 /opt/kubernetes/ssl/flanneld-key.pem - [ k4]no-sync -C https://192.168.56.11:2379,https://192.168.56.12:2379,https://192.168.56.13:2379 mk /kubernetes/network/config "{ " Network": "10.2.0.0/16", "Backend": { "Type": "vxlan", "VNI": 1 }}"启动 flannel[root@linux-node1 ~]# systemctl daemon[k4 ] reload[root@linux-node1 ~]# systemctl 启用 flannel[root@linux-node1 ~]# chmod +x /opt/kubernetes/bin/*[root@linux-node1 ~]# 启动 systemctl flannel 并显示服务状态 [root@linux-node1 ~]# systemctl status flannel 配置 Docker 使用 Flannel [root@linux-node1 ~]# vim /usr/ lib/syStemed/system/docker.service[Unit] #更改后添加 RequiresAfter=network-online.target flannel.serviceWants=network-online.targetRequires=flannel.service[Service] #AddEnvironmentFile=[ k4] / run /flannel/dockerType=notifyEnvironmentFile=-/run/flannel/dockerExecStart=/usr/bin/dockerd $DOCKER_OPTS 最终配置 cat /usr/lib/systemd/system/docker.service[Unit]Description=Docker 应用容器 EngineDocumentation = http://docs.docker.comAfter=network.target flannel.serviceRequires=flannel.service[Service]Type=notifyEnvironmentFile=-/run/flannel/dockerEnvironmentFile=-/opt/kubernetes/cfg /dockerExecStart = / usr/bin/dockerd $DOCKER_OPT_BIP $DOCKER_OPT_MTU $DOCKER_OPTSLimitNOFILE=1048576LimitNPROC=1048576ExecReload=/bin/kill -s HUP $MAINPID# - Limit*s 不为 0 会导致性能问题由于 # 内核中的记帐开销而导致的问题。 容器-我们建议使用cgroups进行本地记账。 LimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinity# 如果您的 systemd 版本支持,请取消注释 TasksMax。 # 仅systemd 226及以上版本支持此版本。 #TasksMax=infinityTimeoutStartSec=0# 将 delegate 设置为 Yes,以防止 systemd 重置 Docker 容器的 cgroup Delegate=yes# 仅杀死 Docker 进程,而不是 cgroup 中的所有进程 KillMode=process# 如果 Docker 进程提前终止,则重新启动它 Restart =on[ k4]failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.target 将配置复制到其他两个阶段 scp /usr /lib/systemd/system/docker.service 192.168.56.12:/usr/ lib/systemd /system/scp /usr/lib/systemd/system/docker.service 192.168.56.13:/usr/lib/systemd/system/restart Docker[root@linux-node1 ~]# systemctl daemon-reload[root@linux-node1 ~]# systemctl restart docker
8. 创建应用程序 >
1. 创建测试部署 [root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 3600002 。 检查 IP 状态 [root@ linux-node1 ~]# kubectl get pod -o WideNAME READY STATUS RESTARTS AGE IP NODEnet-test-74f45db489-gmgv8 1/1 Running 0 1m 10.2.83.2 192.168.56.13net- 测试-74f45db489-pr5jc 1/1 运行 0 1m 10.2.59.2 192.168.56.123。 测试连接(在对应节点测试) ping 10.2.83.2
评论前必须登录!
注册