热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kubernetes(K8s)2020版二进制安装k8s(3)

整体流程规划#查看服务的状态systemctlstatusetcd.servicek8s-master192.168.31.71etcd-1#master存在࿱

整体流程

在这里插入图片描述

在这里插入图片描述


规划

# 查看服务的状态
systemctl status etcd.servicek8s-master
192.168.31.71
etcd-1
# master存在:apiserver controller-manager scheduler etcd
kube-apiserver,
kube-controller-manager,
kube-scheduler,
etcdk8s-node1
192.168.31.72
etcd-2
# node存在 kubelet kube-proxy etcd
kubelet,
kube-proxy,
docker etcd

3、操作系统初始化配

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld# 关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时# 关闭 swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在 master 添加 hosts
cat >> /etc/hosts << EOF
192.168.44.147 m1
192.168.44.148 n1
EOF
# 将桥接的 IPv4 流量传递到 iptables 的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables &#61; 1
net.bridge.bridge-nf-call-iptables &#61; 1
EOF

sysctl --system # 生效# 时间同步 。正确的时间同步 见上个文档
yum install ntpdate -y
ntpdate time.windows.com

4、部署 Etcd 集群

Etcd 是一个分布式键值存储系统&#xff0c;
Kubernetes 使用 Etcd 进行数据存储&#xff0c;
所以先准备 一个 Etcd 数据库&#xff0c;为解决 Etcd 单点故障&#xff0c;应采用集群方式部署&#xff0c;这里使用 3 台组建集 群&#xff0c;可容忍 1 台机器故障&#xff0c;
当然&#xff0c;你也可以使用 5 台组建集群&#xff0c;可容忍 2 台机器故障。


4.1 准备 cfssl 证书生成工具

cfssl 是一个开源的证书管理工具&#xff0c;使用 json 文件生成证书&#xff0c;相比 openssl 更方便使用。 找任意一台服务器操作&#xff0c;这里用 Master 节点。

# cfssl
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
# cfssljson
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64# cfssl-certinfo
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64# 把 cfssl cfssljson cfssl-certinfo赋予执行的权限
chmod &#43;x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64# 把这三个软件 重命名&#xff0c;移动到 /usr/local
# cfssl
mv cfssl_linux-amd64 /usr/local/bin/cfssl
# cfssljson
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
# cfssl-certinfo
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

4.2 生成 Etcd 证书

&#xff08;1&#xff09;自签证书颁发机构&#xff08;CA&#xff09; 创建工作目录&#xff1a;

# 创建 TLS 下的 etcd 和 k8s目录
mkdir -p ~/TLS/{etcd,k8s}
# 进入
cd TLS/etcd

自签 CA&#xff1a;

// 创建 ca-config.json
cat > ca-config.json<< EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF// 创建 ca-csr.json
cat > ca-csr.json<< EOF
{
"CN": "etcd CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
EOF

  • 有了 ca-config 和 ca-csr 文件

生成证书&#xff1a;

# 使用 ca-csr.json生成证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -# 生成了 ca-kay 和 ca 的 pem文件
ls *pem
ca-key.pem ca.pem

&#xff08;2&#xff09;使用自签 CA 签发 Etcd HTTPS 证书 创建证书申请文件&#xff1a;

// 生成了 server-csr.json
cat > server-csr.json<< EOF
{
"CN": "etcd",
"hosts": [
"192.168.31.71",
"192.168.31.72",
"192.168.31.73"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF

注&#xff1a;上述文件 hosts 字段中 IP 为所有 etcd 节点的集群内部通信 IP&#xff0c;一个都不能少&#xff01;为了 方便后期扩容可以多写几个预留的 IP。

生成证书&#xff1a; cfssl gencert

# 使用了 ca.pem 和 ca-key.pem 和 ca-config 和 server-csr
# 即 上面的文件 都使用上了
cfssl gencert -ca&#61;ca.pem -ca-key&#61;ca-key.pem -config&#61;ca-config.json -
profile&#61;www server-csr.json | cfssljson -bare server# 查看 server相关的 pem
ls server*pem
# 得到 server-key 和 server .pem
server-key.pem server.pem

4.3 从 Github 下载二进制文件 下载地址&#xff1a;https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9- linux-amd64.tar.gz


4.4 部署 Etcd 集群

以下在节点 1 上操作&#xff0c;为简化操作&#xff0c;待会将节点 1 生成的所有文件拷贝到节点 2 和节点 3. &#xff08;1&#xff09;创建工作目录并解压二进制包

# 创建目录
mkdir /opt/etcd/{bin,cfg,ssl} –p
# 解压文件
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
# 移动 etcd 和 etcdctl到 /opt... 目录
mv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/

&#xff08;2&#xff09;创建 etcd 配置文件

cat > /opt/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME&#61;"etcd-1"
ETCD_DATA_DIR&#61;"/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS&#61;"https://192.168.31.71:2380"
ETCD_LISTEN_CLIENT_URLS&#61;"https://192.168.31.71:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS&#61;"https://192.168.31.71:2380"
ETCD_ADVERTISE_CLIENT_URLS&#61;"https://192.168.31.71:2379"
ETCD_INITIAL_CLUSTER&#61;"etcd-1&#61;https://192.168.31.71:2380,etcd2&#61;https://192.168.31.72:2380,etcd-3&#61;https://192.168.31.73:2380"
ETCD_INITIAL_CLUSTER_TOKEN&#61;"etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE&#61;"new"
EOF

ETCD_NAME&#xff1a;节点名称&#xff0c;集群中唯一 ETCD_DATA_DIR&#xff1a;数据目录 ETCD_LISTEN_PEER_URLS&#xff1a;集群通信监听地址 ETCD_LISTEN_CLIENT_URLS&#xff1a;客户端访问监听地址 ETCD_INITIAL_ADVERTISE_PEER_URLS&#xff1a;集群通告地址 ETCD_ADVERTISE_CLIENT_URLS&#xff1a;客户端通告地址 ETCD_INITIAL_CLUSTER&#xff1a;集群节点地址 ETCD_INITIAL_CLUSTER_TOKEN&#xff1a;集群 Token ETCD_INITIAL_CLUSTER_STATE&#xff1a;加入集群的当前状态&#xff0c;new 是新集群&#xff0c;existing 表示加入 已有集群

&#xff08;3&#xff09;systemd 管理 etcd

cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description&#61;Etcd Server
After&#61;network.target
After&#61;network-online.target
Wants&#61;network-online.target
[Service]
Type&#61;notify
EnvironmentFile&#61;/opt/etcd/cfg/etcd.conf
ExecStart&#61;/opt/etcd/bin/etcd \
--cert-file&#61;/opt/etcd/ssl/server.pem \
--key-file&#61;/opt/etcd/ssl/server-key.pem \
--peer-cert-file&#61;/opt/etcd/ssl/server.pem \
--peer-key-file&#61;/opt/etcd/ssl/server-key.pem \
--trusted-ca-file&#61;/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file&#61;/opt/etcd/ssl/ca.pem \
--logger&#61;zap
Restart&#61;on-failure
LimitNOFILE&#61;65536
[Install]
WantedBy&#61;multi-user.target
EOF

&#xff08;4&#xff09;拷贝刚才生成的证书 把刚才生成的证书拷贝到配置文件中的路径&#xff1a;

cp ~/TLS/etcd/ca*pem ~/TLS/etcd/server*pem /opt/etcd/ssl/

&#xff08;5&#xff09;启动并设置开机启动

systemctl daemon-reload # 刷新
systemctl start etcd # 启动
systemctl enable etcd # 自启

&#xff08;6&#xff09;将上面节点 1 所有生成的文件拷贝到节点 2 和节点 3

# /etcd 拷贝到 root&#64;ip:/目录
scp -r /opt/etcd/ root&#64;192.168.31.72:/opt/# etcd.service 依然如此拷贝
scp /usr/lib/systemd/system/etcd.service
root&#64;192.168.31.72:/usr/lib/systemd/system/scp -r /opt/etcd/ root&#64;192.168.31.73:/opt/scp /usr/lib/systemd/system/etcd.service
root&#64;192.168.31.73:/usr/lib/systemd/system/

然后在节点 2 和节点 3 分别修改 etcd.conf 配置文件中的节点名称和当前服务器 IP&#xff1a;

vi /opt/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME&#61;"etcd-1" # 修改此处&#xff0c;节点 2 改为 etcd-2&#xff0c;节点 3 改为 etcd-3ETCD_DATA_DIR&#61;"/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS&#61;"https://192.168.31.71:2380" # 修改此处为当前服务器 IP
ETCD_LISTEN_CLIENT_URLS&#61;"https://192.168.31.71:2379" # 修改此处为当前服务器 IP
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS&#61;"https://192.168.31.71:2380" # 修改此处为当前
服务器 IP
ETCD_ADVERTISE_CLIENT_URLS&#61;"https://192.168.31.71:2379" # 修改此处为当前服务器
IP
ETCD_INITIAL_CLUSTER&#61;"etcd-1&#61;https://192.168.31.71:2380,etcd2&#61;https://192.168.31.72:2380,etcd-3&#61;https://192.168.31.73:2380"
ETCD_INITIAL_CLUSTER_TOKEN&#61;"etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE&#61;"new

最后启动 etcd 并设置开机启动&#xff0c;同上。

&#xff08;7&#xff09;查看集群状态

ETCDCTL_API&#61;3 /opt/etcd/bin/etcdctl --cacert&#61;/opt/etcd/ssl/ca.pem --
cert&#61;/opt/etcd/ssl/server.pem --key&#61;/opt/etcd/ssl/server-key.pem --
endpoints&#61;"https://192.168.31.71:2379,https://192.168.31.72:2379,https://192.16
8.31.73:2379"
endpoint health
https://192.168.31.71:2379 is healthy: successfully committed proposal: took &#61;
8.154404ms
https://192.168.31.73:2379 is healthy: successfully committed proposal: took &#61;
9.044117ms
https://192.168.31.72:2379 is healthy: successfully committed proposal: took &#61;
10.000825ms

如果输出上面信息&#xff0c;就说明集群部署成功。如果有问题第一步先看日志&#xff1a; /var/log/message 或 journalctl -u etcd


5、安装 Docker


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
author-avatar
花神
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有