k8s 手动恢复redis 集群_二进制手动部署k8s-1.14高可用集群(二、集群部署)

83cd50166232af196c154abe202f0eee.png

1. CA证书(任意节点)

1.1 安装cfssl
cfssl是非常好用的CA工具,我们用它来生成证书和秘钥文件
安装过程比较简单,如下:

# 下载
$ mkdir -p ~/bin
$ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O ~/bin/cfssl
$ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O ~/bin/cfssljson
# 修改为可执行权限
$ chmod +x ~/bin/cfssl ~/bin/cfssljson
# 设置PATH
$ vi ~/.bash_profile
$ source ~/.bash_profile
# 验证
$ cfssl version

1.2 生成根证书
根证书是集群所有节点共享的,只需要创建一个 CA 证书,后续创建的所有证书都由它签名。

# 生成证书和私钥
$ cd target/pki
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca
# 生成完成后会有以下文件(我们最终想要的就是ca-key.pem和ca.pem,一个秘钥,一个证书)
$ ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
# 创建目录
$ ssh <user>@<node-ip> "mkdir -p /etc/kubernetes/pki/"
# 分发到每个主节点
$ scp ca*.pem <user>@<node-ip>:/etc/kubernetes/pki/

2. 部署etcd集群(master节点)

2.1 下载etcd
如果你是从网盘下载的二进制可以跳过这一步(网盘中已经包含了etcd,不需要另外下载)。
没有从网盘下载bin文件的话需要自己下载etcd

$ wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz

2.2 生成证书和私钥

# 生成证书、私钥
$ cd target/pki/etcd
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes etcd-csr.json | cfssljson -bare etcd
# 分发到每个etcd节点
$ scp etcd*.pem <user>@<node-ip>:/etc/kubernetes/pki/

2.3 创建service文件

# scp配置文件到每个master节点
$ scp target/<node-ip>/services/etcd.service <node-ip>:/etc/systemd/system/
# 创建数据和工作目录
$ ssh <user>@<node-ip> "mkdir -p /var/lib/etcd"

2.4 启动服务
etcd 进程首次启动时会等待其它节点的 etcd 加入集群,命令 systemctl start etcd 会卡住一段时间,为正常现象。

#启动服务
$ systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd
#查看状态
$ service etcd status
#查看启动日志
$ journalctl -f -u etcd

3. 部署api-server(master节点)

3.1 生成证书和私钥

# 生成证书、私钥
$ cd target/pki/apiserver
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
# 分发到每个master节点
$ scp kubernetes*.pem <user>@<node-ip>:/etc/kubernetes/pki/

3.2 创建service文件

# scp配置文件到每个master节点
$ scp target/<node-ip>/services/kube-apiserver.service <user>@<node-ip>:/etc/systemd/system/
# 创建日志目录
$ ssh <user>@<node-ip> "mkdir -p /var/log/kubernetes"

3.3 启动服务

#启动服务
$ systemctl daemon-reload && systemctl enable kube-apiserver && systemctl restart kube-apiserver
#查看运行状态
$ service kube-apiserver status
#查看日志
$ journalctl -f -u kube-apiserver
#检查监听端口
$ netstat -ntlp

4. 部署keepalived - apiserver高可用(master节点)

4.1 安装keepalived

# 在两个主节点上安装keepalived(一主一备)
$ yum install -y keepalived

4.2 创建keepalived配置文件

# 创建目录
$ ssh <user>@<master-ip> "mkdir -p /etc/keepalived"
$ ssh <user>@<backup-ip> "mkdir -p /etc/keepalived"
# 分发配置文件
$ scp target/configs/keepalived-master.conf <user>@<master-ip>:/etc/keepalived/keepalived.conf
$ scp target/configs/keepalived-backup.conf <user>@<backup-ip>:/etc/keepalived/keepalived.conf
# 分发监测脚本
$ scp target/configs/check-apiserver.sh <user>@<master-ip>:/etc/keepalived/
$ scp target/configs/check-apiserver.sh <user>@<backup-ip>:/etc/keepalived/

4.3 启动keepalived

# 分别在master和backup上启动服务
$ systemctl enable keepalived && service keepalived start
# 检查状态
$ service keepalived status
# 查看日志
$ journalctl -f -u keepalived
# 访问测试
$ curl --insecure https://<master-vip>:6443/

5. 部署kubectl(任意节点)
kubectl 是 kubernetes 集群的命令行管理工具,它默认从 ~/.kube/config 文件读取 kube-apiserver 地址、证书、用户名等信息。

5.1 创建 admin 证书和私钥
kubectl 与 apiserver https 安全端口通信,apiserver 对提供的证书进行认证和授权。
kubectl 作为集群的管理工具,需要被授予最高权限。这里创建具有最高权限的 admin 证书。

# 创建证书、私钥
$ cd target/pki/admin
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes admin-csr.json | cfssljson -bare admin

5.2 创建kubeconfig配置文件
kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书

# 设置集群参数
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<MASTER_VIP>:6443
--kubeconfig=kube.config
# 设置客户端认证参数
$ kubectl config set-credentials admin
--client-certificate=admin.pem
--client-key=admin-key.pem
--embed-certs=true
--kubeconfig=kube.config
# 设置上下文参数
$ kubectl config set-context kubernetes
--cluster=kubernetes
--user=admin
--kubeconfig=kube.config
# 设置默认上下文
$ kubectl config use-context kubernetes --kubeconfig=kube.config
# 分发到目标节点
$ scp kube.config <user>@<node-ip>:~/.kube/config

5.3 授予 kubernetes 证书访问 kubelet API 的权限
在执行 kubectl exec、run、logs 等命令时,apiserver 会转发到 kubelet。这里定义 RBAC 规则,授权 apiserver 调用 kubelet API。

$ kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes

5.4 小测试

# 查看集群信息
$ kubectl cluster-info
$ kubectl get all --all-namespaces
$ kubectl get componentstatuses

6. 部署controller-manager(master节点)
controller-manager启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 leader 节点不可用后,剩余节点将再次进行选举产生新的 leader 节点,从而保证服务的可用性。

6.1 创建证书和私钥

# 生成证书、私钥
$ cd target/pki/controller-manager
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes controller-manager-csr.json | cfssljson -bare controller-manager
# 分发到每个master节点
$ scp controller-manager*.pem <user>@<node-ip>:/etc/kubernetes/pki/

6.2 创建controller-manager的kubeconfig

# 创建kubeconfig
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<MASTER_VIP>:6443
--kubeconfig=controller-manager.kubeconfig
$ kubectl config set-credentials system:kube-controller-manager
--client-certificate=controller-manager.pem
--client-key=controller-manager-key.pem
--embed-certs=true
--kubeconfig=controller-manager.kubeconfig
$ kubectl config set-context system:kube-controller-manager
--cluster=kubernetes
--user=system:kube-controller-manager
--kubeconfig=controller-manager.kubeconfig
$ kubectl config use-context system:kube-controller-manager --kubeconfig=controller-manager.kubeconfig
# 分发controller-manager.kubeconfig
$ scp controller-manager.kubeconfig <user>@<node-ip>:/etc/kubernetes/

6.3 创建service文件

# scp配置文件到每个master节点
$ scp target/services/kube-controller-manager.service <user>@<node-ip>:/etc/systemd/system/

6.4 启动服务

# 启动服务
$ systemctl daemon-reload && systemctl enable kube-controller-manager && systemctl restart kube-controller-manager
# 检查状态
$ service kube-controller-manager status
# 查看日志
$ journalctl -f -u kube-controller-manager
# 查看leader
$ kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml

7. 部署scheduler(master节点)
scheduler启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 leader 节点不可用后,剩余节点将再次进行选举产生新的 leader 节点,从而保证服务的可用性。

7.1 创建证书和私钥

# 生成证书、私钥
$ cd target/pki/scheduler
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes scheduler-csr.json | cfssljson -bare kube-scheduler

7.2 创建scheduler的kubeconfig

# 创建kubeconfig
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<MASTER_VIP>:6443
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config set-credentials system:kube-scheduler
--client-certificate=kube-scheduler.pem
--client-key=kube-scheduler-key.pem
--embed-certs=true
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config set-context system:kube-scheduler
--cluster=kubernetes
--user=system:kube-scheduler
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config use-context system:kube-scheduler --kubeconfig=kube-scheduler.kubeconfig
# 分发kubeconfig
$ scp kube-scheduler.kubeconfig <user>@<node-ip>:/etc/kubernetes/

7.3 创建service文件

# scp配置文件到每个master节点
$ scp target/services/kube-scheduler.service <user>@<node-ip>:/etc/systemd/system/

7.4 启动服务

# 启动服务
$ systemctl daemon-reload && systemctl enable kube-scheduler && systemctl restart kube-scheduler
# 检查状态
$ service kube-scheduler status
# 查看日志
$ journalctl -f -u kube-scheduler
# 查看leader
$ kubectl get endpoints kube-scheduler --namespace=kube-system -o yaml

8. 部署kubelet(worker节点)

8.1 预先下载需要的镜像

# 预先下载镜像到所有节点(由于镜像下载的速度过慢,我给大家提供了阿里云仓库的镜像)
$ scp target/configs/download-images.sh <user>@<node-ip>:~
# 在目标节点上执行脚本下载镜像
$ sh ~/download-images.sh

8.2 创建bootstrap配置文件

# 创建 token
$ cd target/pki/admin
$ export BOOTSTRAP_TOKEN=$(kubeadm token create
--description kubelet-bootstrap-token
--groups system:bootstrappers:worker
--kubeconfig kube.config)
# 设置集群参数
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<MASTER_VIP>:6443
--kubeconfig=kubelet-bootstrap.kubeconfig
# 设置客户端认证参数
$ kubectl config set-credentials kubelet-bootstrap
--token=${BOOTSTRAP_TOKEN}
--kubeconfig=kubelet-bootstrap.kubeconfig
# 设置上下文参数
$ kubectl config set-context default
--cluster=kubernetes
--user=kubelet-bootstrap
--kubeconfig=kubelet-bootstrap.kubeconfig
# 设置默认上下文
$ kubectl config use-context default --kubeconfig=kubelet-bootstrap.kubeconfig
# 把生成的配置copy到每个worker节点上
$ scp kubelet-bootstrap.kubeconfig <user>@<node-ip>:/etc/kubernetes/kubelet-bootstrap.kubeconfig
# 先在worker节点上创建目录
$ mkdir -p /etc/kubernetes/pki
# 把ca分发到每个worker节点
$ scp target/pki/ca.pem <user>@<node-ip>:/etc/kubernetes/pki/

8.3 kubelet配置文件
把kubelet配置文件分发到每个worker节点上

$ scp target/worker-<node-ip>/kubelet.config.json <user>@<node-ip>:/etc/kubernetes/

8.4 kubelet服务文件
把kubelet服务文件分发到每个worker节点上

$ scp target/worker-<node-ip>/kubelet.service <user>@<node-ip>:/etc/systemd/system/

8.5 启动服务
kublet 启动时查找配置的 –kubeletconfig 文件是否存在,如果不存在则使用 –bootstrap-kubeconfig 向 kube-apiserver 发送证书签名请求 (CSR)。
kube-apiserver 收到 CSR 请求后,对其中的 Token 进行认证(事先使用 kubeadm 创建的 token),认证通过后将请求的 user 设置为 system:bootstrap:,group 设置为 system:bootstrappers,这就是Bootstrap Token Auth。

# bootstrap附权
$ kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --group=system:bootstrappers
# 启动服务
$ mkdir -p /var/lib/kubelet
$ systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet
# 在master上Approve bootstrap请求
$ kubectl get csr
$ kubectl certificate approve <name>
# 查看服务状态
$ service kubelet status
# 查看日志
$ journalctl -f -u kubelet

9. 部署kube-proxy(worker节点)

9.1 创建证书和私钥

$ cd target/pki/proxy
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

9.2 创建和分发 kubeconfig 文件

# 创建kube-proxy.kubeconfig
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<master-vip>:6443
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config set-credentials kube-proxy
--client-certificate=kube-proxy.pem
--client-key=kube-proxy-key.pem
--embed-certs=true
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config set-context default
--cluster=kubernetes
--user=kube-proxy
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
# 分发kube-proxy.kubeconfig
$ scp kube-proxy.kubeconfig <user>@<node-ip>:/etc/kubernetes/

9.3 分发kube-proxy.config

$ scp target/worker-<node-ip>/kube-proxy.config.yaml <user>@<node-ip>:/etc/kubernetes/

9.4 分发kube-proxy服务文件

$ scp target/services/kube-proxy.service <user>@<node-ip>:/etc/systemd/system/

9.5 启动服务

# 创建依赖目录
$ mkdir -p /var/lib/kube-proxy && mkdir -p /var/log/kubernetes
# 启动服务
$ systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy
# 查看状态
$ service kube-proxy status
# 查看日志
$ journalctl -f -u kube-proxy

10. 部署CNI插件 - calico
我们使用calico官方的安装方式来部署。

# 创建目录(在配置了kubectl的节点上执行)
$ mkdir -p /etc/kubernetes/addons
# 上传calico配置到配置好kubectl的节点(一个节点即可)
$ scp target/addons/calico* <user>@<node-ip>:/etc/kubernetes/addons/
# 部署calico
$ kubectl create -f /etc/kubernetes/addons/calico-rbac-kdd.yaml
$ kubectl create -f /etc/kubernetes/addons/calico.yaml
# 查看状态
$ kubectl get pods -n kube-system

11. 部署DNS插件 - coredns

# 上传配置文件
$ scp target/addons/coredns.yaml <user>@<node-ip>:/etc/kubernetes/addons/
# 部署coredns
$ kubectl create -f /etc/kubernetes/addons/coredns.yaml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现DDD领域驱动设计: Part 1

原文链接: https://dev.to/salah856/implementing-domain-driven-design-part-i-5a72简单的代码&#xff01;踢足球很简单&#xff0c;难的是踢简单的足球。— 克鲁伊夫如果我们将这句话用到编程上&#xff0c;我们可以说&#xff1b;写代码很简单&#xff0c;难的是写简单的代…

XE5 Android 开发实现手机打电话和发短信 [转]

其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍. 1.短信息.很简单 方法a.不使用Intent而是直接发短信. smsManager对应的Delphi代码应该是: usesAndroidapi.JNI.JavaTypes,Androidapi.JNI.Telephon…

安装程序无法创建新的系统分区也无法定位现有分区的解决方法

2019独角兽企业重金招聘Python工程师标准>>> 在安装Windows7时&#xff0c;想必有很多人都安碰到这样的情况吧!在安装界面里选择安装时&#xff0c;却出现“安装程序无法创建新的系统分区&#xff0c;也无法定位现有系统分区” 网上提供的另外解决方法大全&#xff…

python多线程读取数据库数据_Python基于多线程操作数据库相关知识点详解

Python基于多线程操作数据库相关问题分析 本文实例分析了Python多线程操作数据库相关问题。分享给大家供大家参考&#xff0c;具体如下&#xff1a; python多线程并发操作数据库&#xff0c;会存在链接数据库超时、数据库连接丢失、数据库操作超时等问题。 解决方法&#xff1a…

IDA64 Fatal error before kernel init

http://www.tuicool.com/articles/7FZVZna 第一次看到这个错误还以为是修改文件导致的&#xff0c;但是觉得又不大像&#xff0c;因为在Win7底下是完全正常的。搜索了一下才发现是由于插件导致的&#xff1a; NOTE3: You get a “Fatal error before kernel init” when trying…

Android安全与逆向之在ubuntu上面搭建NDK环境

1、下载Android NDK自解压包&#xff0c; 官方地址&#xff1a;https://developer.android.com/ndk/downloads/index.html#download下载&#xff1a;$ wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 2、解压&#xff0c; 将Android NDK压缩包…

和我一起来分析某药品仓储管理系统 卡死现象

一&#xff1a;背景 1. 讲故事这个月初&#xff0c;有位朋友wx上找到我&#xff0c;说他的api过一段时间后&#xff0c;就会出现只有请求&#xff0c;没有响应的情况&#xff0c;截图如下&#xff1a;从朋友的描述中看样子程序是被什么东西卡住了&#xff0c;这种卡死的问题解决…

如何定位Source Generators性能问题

前言在以前的文章中&#xff0c;我们介绍过如何调试Source Generators。但是当实现较为复杂时&#xff0c;我们需要能够快速地分析Source Generators性能的方法。默认情况下&#xff0c;使用VS 2019自带的“性能探查器”不能分析Source Generators项目&#xff0c;因为它是类库…

什么是域(domain)

在今天很多人都有意识或无意识的跟域这个东西打过交道。如果你在公司里使用电脑&#xff0c;并且你的电脑接入了公司的局域网&#xff0c;那你的电脑很可能就在一个域中。如何查看你的电脑是否连接到一个域中&#xff0c;以Windows为例&#xff0c;右击我的电脑 –>属性&…

四舍五入运算

为什么80%的码农都做不了架构师&#xff1f;>>> 请用户输入1个实数(浮点型),请编写算法对这个实数进行四舍五入到个位的运算. 例如 12.56经过四舍五入运算得到13. 而12.45经过四舍五入运算得到12 代码如下地址: http://git.oschina.net/touch1D/qf17j3eughwdp8zxi…

python 新建html_Python学习第226课——html中创建按钮

前面我们学习了一些常见的表单元素&#xff0c;表单就是用来收集用户的信息的&#xff0c;比如调查问卷、用户登录网站的页面等这类的网页&#xff0c;里面都要用到表单元素&#xff0c;当用户在前端页面上填入账号、密码、或者调查问卷的答案等等信息之后&#xff0c;就需要提…

WPF 实现图片切成九宫格控件~

WPF开发者QQ群&#xff1a; 340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS&#xff1a;有更好的方式欢迎推荐。接着上一篇倒计时控件01—代码如下一、创建 CropControl.cs代码如下。&#xff08;修改RowColumn “…

GCT之数学公式(三角函数)

转载于:https://www.cnblogs.com/jyh317/p/3386598.html

Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别

Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性&#xff0c;Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用&#xff0c;和在低速CPU上表现出的高性能&#xff0c;确实令人刮目相看。 依赖于底层Posix兼容的操作系统&#xff0c;它可以简单的…

软件与硬件我该选哪个_MacBook Air 和 MacBook Pro 该选哪个……?

一个多月前&#xff0c;Apple 发布了 2019 款 MacBook Air 和 MacBook Pro&#xff0c;经过这一次的更新之后&#xff0c;MacBook 产品线总算变得更加清晰了&#xff0c;同时也减少了之前存在的价格和定位产生冲突的现象。不过从购买决策来看&#xff0c;我发现还是有些问题难倒…

只要300页!火遍全网的NET6+linux知识手册!拿走不谢!

这是微软公司基于最新的.net 6编写&#xff0c;循序渐进地对.net6/C#10进行讲解。对于零基础可以作为.net的快速入门教材&#xff0c;对于高级程序员而言&#xff0c;这也是你的进阶之路&#xff01;NO.1资料介绍该手册,全面的介绍.net6和c#的新特性&#xff0c;看完这个资料&a…