k8s的二进制部署(一)

k8s的二进制部署:源码包部署

环境:

k8smaster01:  20.0.0.71  kube-apiserver kube-controller-manager kube-schedule ETCD

k8smaster02:  20.0.0.72  kube-apiserver kube-controller-manager kube-schedule

Node节点01: 20.0.0.73 kubelet kube-proxy ETCD

Node节点01: 20.0.0.74 kubelet kube-proxy ETCD

负载均衡:nginx+keepalived:

master:20.0.0.75  backup:20.0.0.0.76

ETCD:20.0.0.71

              20.0.0.73

              20.0.0.74

开始实验:

所有 :master01 node 1,2

systemctl stop firewalld

setenforce 0

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

swapoff -a

###

swapoff -a

k8s在设计时,为了提升性能,默认是不使用swap分区,kubenetes在初始化时,会检测swap是否关闭

##

master1:

hostnamectl set-hostname master01

node1:

hostnamectl set-hostname node01

node2:

hostnamectl set-hostname node02

所有

vim /etc/hosts

20.0.0.71 master01

20.0.0.72 node01

20.0.0.73 node02

vim /etc/sysctl.d/k8s.conf

#开启网桥模式:

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

#网桥的流量传给iptables链,实现地址映射

#关闭ipv6的流量(可选项)

net.ipv6.conf.all.disable_ipv6=1

#根据工作中的实际情况,自定

net.ipv4.ip_forward=1

wq!

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv6.conf.all.disable_ipv6=1

net.ipv4.ip_forward=1

##

sysctl --system

yum install ntpdate -y

ntpdate ntp.aliyun.com

date

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io

systemctl start docker.service

systemctl enable docker.service

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://t7pjr1xu.mirror.aliyuncs.com"]

}

EOF

systemctl daemon-reload

systemctl restart docker

部署第一个组件:

存储k8s的集群信息和用户配置组件:etcd

etcd是一个高可用---分布式的键值对存储数据库

采用raft算法保证节点的信息一致性,etcd是用go语言写的

etcd的端口:2379:api接口 对外为客户端提供通讯

2380:内存服务的通信端口

etcd一般都是集群部署,etcd也有选举leader的机制,至少要3台,或者奇数台

k8s的内部通信依靠证书认证,密钥认证:证书的签发环境

关闭全部操作

master01:

cd /opt

投进来三个证书

mv cfssl cfssl-certinfo cfssljson /usr/local/bin

chmod 777 /usr/local/bin/cfssl*

##

cfssl:证书签发的命令工具

cdssl-certinfo:查看证书信息的工具

cfssljson:把证书的格式转化为json格式,变成文件的承载式证书

##

cd /opt

mkdir k8s

cd k8s

把两个证书投进去:

vim etcd-cert.sh

vim etcd.sh

q!

chmod 777 etcd-cert.sh etcd.sh

mkdir /opt/k8s/etcd-cert

mv etcd-cert.sh etcd-cert/

cd /opt/k8s/etcd-cert/

./etcd-cert.sh

Ls

##

ca-config.json  ca-csr.json  ca.pem        server.csr       server-key.pem

ca.csr          ca-key.pem   etcd-cert.sh  server-csr.json  server.pem

解析:

ca-config.json: 证书颁发的配置文件,定义了证书生成的策略,默认的过期时间和模版

ca-csr.json: 签名的请求文件,包括一些组织信息和加密方式

ca.pem 根证书文件,用于给其他组件签发证书

server.csr etcd的服务器签发证书的请求文件

server-key.pem etcd服务器的私钥文件

ca.csr 根证书签发请求文件

ca-key.pem   根证书私钥文件

server-csr.json 用于生成etcd的服务器证书和私钥签名文件

server.pem etcd服务器证书文件,用于加密和认证 etcd 节点之间的通信。

###

cd /opt/k8s/

把  etcd-v3.4.9-linux-amd64.tar.gz 拖进去

tar zxvf etcd-v3.4.9-linux-amd64.tar.gz

ls etcd-v3.4.9-linux-amd64

mkdir -p /opt/etcd/{cfg,bin,ssl}

cd etcd-v3.4.9-linux-amd64

mv etcd etcdctl /opt/etcd/bin/

cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/

cd /opt/k8s/

./etcd.sh etcd01 20.0.0.71 etcd02=https://20.0.0.72:2380,etcd03=https://20.0.0.73:2380

开一台master1终端

scp -r /opt/etcd/ root@20.0.0.72:/opt/

scp -r /opt/etcd/ root@20.0.0.73:/opt/

scp /usr/lib/systemd/system/etcd.service root@20.0.0.72:/usr/lib/systemd/system/

scp /usr/lib/systemd/system/etcd.service root@20.0.0.73:/usr/lib/systemd/system/

node1:

vim /opt/etcd/cfg/etcd

node2:

vim /opt/etcd/cfg/etcd

一个一个起(谁先启谁就是主节点)

从master01开始

systemctl start etcd

systemctl enable etcd

systemctl status etcd

master:

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://20.0.0.71:2379,https://20.0.0.72:2379,https://20.0.0.73:2379" endpoint health --write-out=table

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://20.0.0.71:2379,https://20.0.0.72:2379,https://20.0.0.73:2379" --write-out=table member list

master01:

#上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中,解压 master.zip 压缩包

cd /opt/k8s/

vim k8s-cert.sh

unzip master.zip

chmod 777 *.sh

vim controller-manager.sh

vim scheduler.sh

vim admin.sh

##

#创建kubernetes工作目录

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

mkdir /opt/k8s/k8s-cert

mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert

cd /opt/k8s/k8s-cert/

./k8s-cert.sh

Ls

cp ca*pem apiserver*pem /opt/kubernetes/ssl/

cd  /opt/kubernetes/ssl/

Ls

cd /opt/k8s/

把 kubernetes-server-linux-amd64.tar.gz 拖进去

tar zxvf kubernetes-server-linux-amd64.tar.gz

cd /opt/k8s/kubernetes/server/bin

cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/

ln -s /opt/kubernetes/bin/* /usr/local/bin/

kubectl get node

kubectl get cs

cd /opt/k8s/

vim token.sh

#!/bin/bash

#获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格

BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')

#生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成

cat > /opt/kubernetes/cfg/token.csv <<EOF

${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"

EOF

chmod 777 token.sh

./token.sh

cat /opt/kubernetes/cfg/token.csv

cd /opt/k8s/

./apiserver.sh 20.0.0.71 https://20.0.0.71:2379,https://20.0.0.72:2379,https://20.0.0.73:2379

netstat -natp | grep 6443

cd /opt/k8s/

./scheduler.sh

ps aux | grep kube-scheduler

./controller-manager.sh

ps aux | grep kube-controller-manager

./admin.sh

kubectl get cs

kubectl version

kubectl api-resources

vim /etc/profile

G

o

source < (kubectl completion bash)

source /etc/profile

Master1操作完毕,接下来操作node1,2

所有 node 节点上操作 node1,2:

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

cd /opt

 node.zip 到 /opt 目录中

unzip node.zip

chmod 777 kubelet.sh proxy.sh

关闭同步操作:

master01:

cd /opt/k8s/kubernetes/server/bin

scp kubelet kube-proxy root@20.0.0.72:/opt/kubernetes/bin/

scp kubelet kube-proxy root@20.0.0.73:/opt/kubernetes/bin/

master 01:

mkdir -p /opt/k8s/kubeconfig

cd /opt/k8s/kubeconfig

把kubeconfig.sh 拖进去

chmod 777 kubeconfig.sh

./kubeconfig.sh 20.0.0.71 /opt/k8s/k8s-cert/

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@20.0.0.72:/opt/kubernetes/cfg/

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@20.0.0.73:/opt/kubernetes/cfg/

node1,2:

cd /opt/kubernetes/cfg/

ls

master01:

kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

#RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书,通过CSR加密认证实现INIDE节点加入到集群当中,kubelet获取master的验证信息和获取API的验证

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

node1:

cd /opt/

chmod 777 kubelet.sh

./kubelet.sh 20.0.0.72

master01:

kubectl get cs

kubectl get csr

NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION

node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   12s  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending

kubectl certificate approve node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE

##上面的密钥对

kubectl get csr

NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION

node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   2m5s kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

##必须是Approved,Issued 才成功

node2:

cd /opt/

chmod 777 kubelet.sh

./kubelet.sh 20.0.0.73

master01:

kubectl get cs

kubectl get csr

NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION

node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   12s  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending

kubectl certificate approve node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE

##上面的密钥对

kubectl get csr

NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION

node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   2m5s kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

##必须是Approved,Issued 才成功

master01:

kubectl get node

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GrayLog日志平台的基本使用-ssh接入Dashboards展示

这里使用的版本为graylog4.2.10 1、一键安装graylog4.2.10&#xff0c;解压zip包&#xff0c;执行脚本就行 链接&#xff1a;https://pan.baidu.com/s/11U7GpBZ1B7PXR8pyWVcHNw?pwdudln 提取码&#xff1a;udln 2、通过rsyslog采集系统日志&#xff0c;具体操作参考前面文…

饮用水中的砷、硝酸盐含量超标,离子交换工艺分享

随着人们对健康和生活质量的日益关注&#xff0c;饮用水安全问题成为了社会关注的焦点。在自然水体中的含量往往较高&#xff0c;而这些物质对人体健康存在一定的潜在风险。因此&#xff0c;饮用水处理中如何有效去除溴酸盐和硝酸盐&#xff0c;成为了当前水处理行业的重要课题…

CTFshow-pwn入门-栈溢出pwn39-pwn40

pwn39 首先我们还是先将二级制文件托到虚拟机里面查看文件的保护信息。 chmod x pwn checksec pwn文件依然是只开启了栈不可执行&#xff0c;canary和pie都没开。并且该文件是32位的&#xff0c;那我们就托到ida32中反编译一下吧。 int __cdecl main(int argc, const char **…

LSTM的记忆能力实验 [HBU]

目录 模型构建 LSTM层 模型训练 多组训练 模型评价 模型在不同长度的数据集上的准确率变化图 模型汇总 总结 长短期记忆网络&#xff08;Long Short-Term Memory Network&#xff0c;LSTM&#xff09;是一种可以有效缓解长程依赖问题的循环神经网络&#xff0e;LSTM 的…

go 源码解读 - sync.Mutex

sync.Mutex mutex简介mutex 方法源码标志位获取锁LocklockSlowUnlock怎么 调度 goroutineruntime 方法 mutex简介 mutex 是 一种实现互斥的同步原语。&#xff08;go-version 1.21&#xff09; &#xff08;还涉及到Go运行时的内部机制&#xff09;mutex 方法 Lock() 方法用于…

nodejs业务分层如何写后端接口

这里展示的是在node express 项目中的操作 &#xff0c;数据库使用的是MongoDB&#xff0c;前期关于express和MongoDB的文章可访问&#xff1a; Nodejs后端express框架 server后端接口操作&#xff1a;通过路由匹配——>调用对应的 Controller——>进行 Service调用——&…

如何将语音版大模型AI接入自己的项目里(语音ChatGPT)

如何将语音版大模型AI接入自己的项目里语音ChatGPT 一、语音版大模型AI二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例5、智能生成API代码 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、语音版大模型AI 基于阿里通义千问、百…

ueditor富文本编辑器中图片上传地址配置以及抓取远程图片地址的配置

一&#xff1a;图片上传保存地址配置 打开文件ueditor.php,找到imagePathFormat进行修改即可 一&#xff1a;远程抓取图片配置 打开文件ueditor.config.js,找到catchRemoteImageEnable&#xff0c;取消注释即可

ElasticSearch 聚合统计

聚合统计 度量聚合&#xff1a;求字段的平均值&#xff0c;最小值&#xff0c;最大值&#xff0c;总和等 桶聚合&#xff1a;将文档分成不同的桶&#xff0c;桶的划分可以根据字段的值&#xff0c;范围&#xff0c;日期间隔 管道聚合&#xff1a;在桶聚合的结果上执行进一步计…

线程学习(3)-volatile关键字,wait/notify的使用

​ &#x1f495;"命由我作&#xff0c;福自己求"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;线程学习(2)​​​​ 一.volatile关键字 volatile关键字是多线程编程中一个非常重要的概念&#xff0c;它主要有两个功能&#xff1a;保证内存可见性…

JVM GC 算法原理概述

对于JVM的垃圾收集&#xff08;GC&#xff09;&#xff0c;这是一个作为Java开发者必须了解的内容&#xff0c;那么&#xff0c;我们需要去了解哪些内容呢&#xff0c;其实&#xff0c;GC主要是解决下面的三个问题&#xff1a; 哪些内存需要回收&#xff1f; 什么时候回收&…

Pandas教程(二)—— 不同格式的数据读取

前言&#xff1a;几种常用数据格式的介绍 csv文件 1. 逗号分隔值文件&#xff0c;以纯文本形式&#xff08;记事本&#xff09;存储表格数据 2. 它是一种平面文件&#xff1a;即只存储数据和文字&#xff0c;不能存储公式、图表等 3. 更适合存储大数据&#xff0c;一般用来批…

GitLab 删除或移动项目

首先明说&#xff0c;删除后无法恢复 第一步&#xff1a;找到要删除的项目 第二步&#xff1a;进入目录后&#xff0c;左侧菜单&#xff0c;设置 >>> 通用&#xff0c;拉到最下面找到“高级”&#xff0c;点击右侧“展开” 第三步&#xff1a;点击“展开”后往下拉&a…

作业--day37

课上strcut的练习改成class&#xff0c;并写一个有默认参数的函数&#xff0c;把声明和定义分开&#xff0c;并在主函数内成功调用 #include <iostream> #include <iomanip> #include <cstring>using namespace std;class stu{ private:int age;char sex;fl…

理解文件系统

一 什么是文件系统 文件系统是计算机操作系统中的一个核心组件&#xff0c;用于管理计算机中的文件和文件夹。它提供了一种组织和访问计算机存储设备上数据的方式。文件系统使用户能够创建、修改、删除和查找文件&#xff0c;以及组织文件和文件夹的层次结构。 ps: linux一共有…

MongoDB文档操作

3.3 文档操作 3.1 文档介绍 文档的数据结构和 JSON 基本一样。 所有存储在集合中的数据都是 BSON 格式。 BSON 是一种类似 JSON 的二进制形式的存储格式&#xff0c;是 Binary JSON 的简称。 文档是一组键值(key-value)对(即 BSON)&#xff0c;一个简单的文档例子如下&…

vue+element实现动态表格:根据后台返回的属性名和字段动态生成可变表格

现有一个胡萝卜厂生产不同品种的胡萝卜&#xff0c;为了便于客户了解产品&#xff0c;现需在官网展示胡萝卜信息。现有的萝卜信息&#xff1a;编号&#xff08;id&#xff09;、名称&#xff08;name&#xff09;、保质期&#xff08;age&#xff09;、特点&#xff08;remark&…

Java架构师系统架构设计实践

目录 1 导语2 架构设计实践本章概述3 架构设计要素概述和规划4 架构设计模式5 架构设计输入6 架构设计输出7 架构设计要素总结 想学习架构师构建流程请跳转&#xff1a;Java架构师系统架构设计 1 导语 Java架构师在进行系统架构设计时&#xff0c;需要综合考虑多个方面&#…

c语言:计算1+2+3……+n的和|练习题

一、题目 输入一个数n&#xff0c;计算123……n的和 二、代码截图【带注释】 三、源代码【带注释】 #include int main() { int num0; printf("请输入要运算的数:"); scanf("%d",&num); sumResult(num);//相加结果函数 } //计算打印…

使用CRA(create-react-app)初始化一个完整的项目环境(该初始化项目已上传到本文章的资源)

1. 整理项目结构&#xff0c;项目目录结构大致划分如下&#xff1a; 2. 安装sass 安装sass开发环境, 注意&#xff1a;使用的文件后缀名要用.scssnpm i sass -D3. 安装Ant Design npm i antd --save 4. 配置基础路由Router&#xff08;具体可参考ReactRouter使用详解&#x…
最新文章