热门标签 | 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


推荐阅读
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Envoy 流量分配策略优化
    在本研究中,我们对Envoy的流量分配策略进行了优化,旨在提高系统的稳定性和性能。实验环境包括一个前端代理服务(Envoy,IP地址为172.31.57.10)和五个后端服务。通过调整Envoy的配置,实现了更高效的流量分发和负载均衡,显著提升了整体系统的响应速度和可靠性。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
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社区 版权所有