K8S安装和部署(kubeadmin安装1主2从)

这里用kubeadmin方式进行安装部署

1. 准备三台服务器

服务器地址

节点名称

192.168.190.200

master

192.168.190.201

node1

192.168.190.202

node2

2. 主机初始化(所有主机)

2.1根据规划设置主机名

#切换到192.168.190.200
hostnamectl set-hostname  master
#切换到192.168.190.201
hostnamectl set-hostname  node1
#切换到192.168.190.202
hostnamectl set-hostname  node2

并三台主机设置主机名和IP地址的映射关系

vim /etc/hosts

172.19.3.240  k8s-master
172.19.3.241  k8s-node1
172.19.3.242  k8s-node2

2.2 时间同步 (如果服务器时间同步忽略此步骤)

#启动chronyd服务
systemctl start chronyd
systemctl enable chronyd
date 

💡 Tips:执行命令前 可以 使用 rpm -qa |grep chrony 查看系统是否已安装chrony,没有安装环境可使用 yum

install chrony 命令安装

2.3 安装docker(三台服务器均需安装)

1 安装命令工具 yum install -y yum-utils

2 切换源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3 查看版本号 3.10以上可安装 推荐centos7以上系统

4 查看可安装docker软件包

yum list docker-ce --showduplicates | sort -r

5 安装并启动docker

yum install docker-ce-20.10.21-3.el7 -y
systemctl start docker
systemctl enable docker

这里在执行 yum install docker-ce-20.10.21-3.el7 -y 命令是报错,报错内容如下

---> 软件包 docker-compose-plugin.x86_64.0.2.16.0-1.el7 将被 安装

---> 软件包 docker-scan-plugin.x86_64.0.0.23.0-3.el7 将被 安装

--> 解决依赖关系完成

错误:软件包:docker-ce-rootless-extras-23.0.1-1.el7.x86_64 (docker-ce-stable)

需要:fuse-overlayfs >= 0.7

错误:软件包:docker-ce-rootless-extras-23.0.1-1.el7.x86_64 (docker-ce-stable)

需要:slirp4netns >= 0.4

错误:软件包:containerd.io-1.6.18-3.1.el7.x86_64 (docker-ce-stable)

需要:container-selinux >= 2:2.74

错误:软件包:3:docker-ce-20.10.21-3.el7.x86_64 (docker-ce-stable)

需要:container-selinux >= 2:2.74

您可以尝试添加 --skip-broken 选项来解决该问题

您可以尝试执行:rpm -Va --nofiles --nodigest

解决错误,执行以下命令 参考RedHat7使用阿里云镜像建立元数据缓存时404解决_yum makecache aliyun 404-CSDN博客

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all

yum makecache //这里执行会报错,按下面命令继续执行

sed -i 's/\$releasever/7/' /etc/yum.repos.d/CentOS-Base.repo

sed -i 's#$basearch#x86_64#g' /etc/yum.repos.d/CentOS-Base.repo

yum clean all

yum makecache

最后执行安装和启动命令即可成功安装

yum install docker-ce-20.10.21-3.el7 -y
systemctl start docker
systemctl enable docker

查看安装版本 docker version

2.4 关闭防火墙和SELinux,并且禁用Swap(三台服务器均需操作)

### 关闭防火墙
systemctl disable --now firewalld### 关闭selinux, 让容器可以读取主机文件系统
getenforce      # 查看 
setenforce 0    # 临时关闭
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config    # 永久关闭### 关闭swap
swapoff -a      # 临时关闭swap
sed -i 's/.*swap.*/#&/' /etc/fstab    # 永久关闭swap

3. 添加网桥过滤和地址转发功能(三台服务器均需操作)

cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF#然后执行
sysctl --system   //生效命令

4. kubernetes镜像切换成国内源(三台服务器均需操作)

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

5. 安装指定版本的 kubeadm,kubelet和kubectl(三台服务器均需操作)

yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5
#设置kubelet开机自启
systemctl enable kubelet
systemctl start kubelet

查看安装版本

kubelet --version
kubeadm version
kubectl version

6. 部署Kubernetes

💡 Tips:下面的操作只需要在master节点上执行即可(初始化完成后,最后会输出一个join命令,可以先保存后边会用)

kubeadm init \--apiserver-advertise-address=172.16.2.240 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.23.5 \--service-cidr=10.1.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--ignore-preflight-errors=all#172.16.2.240为主机IP

–apiserver-advertise-address #集群通告地址(master 机器IP)

–image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址

–kubernetes-version #K8s版本,与上面安装的一致

–service-cidr #集群内部虚拟网络,Pod统一访问入口

–pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致

执行以上命令可能会报错,

报错解决:The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz" 

#解决上述报错,如果没有配置的所有服务器都需要配置,这里也要配置docker的国内镜像,不然镜像拉取会比较慢
# 添加以下内容
vim /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"]
}# 重启docker
systemctl restart docker
# 重新初始化
kubeadm reset # 先重置
# 重新执行上面的 kubeadm init

初始化成功后会输出以下信息(第11步会用到)

master上执行命令:kubeadm token create --print-join-command 重新查看join命令

7. 在master上配置kubectl命令行工具

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

8.在master节点上下载flannel网络配置文件

 wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

下边是下载的文件内容kube-flannel.yml,下载不了可以保存下边这份文件,注意修改文件中地址跟第6步中的配置的一样

  --pod-network-cidr=10.244.0.0/16 

---
kind: Namespace
apiVersion: v1
metadata:name: kube-flannellabels:pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
rules:
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- get- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-flannellabels:tier: nodeapp: flannel
data:cni-conf.json: |{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-dsnamespace: kube-flannellabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linuxhostNetwork: truepriorityClassName: system-node-criticaltolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cni-plugin#image: flannelcni/flannel-cni-plugin:v1.1.0 for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0command:- cpargs:- -f- /flannel- /opt/cni/bin/flannelvolumeMounts:- name: cni-pluginmountPath: /opt/cni/bin- name: install-cni#image: flannelcni/flannel:v0.20.2 for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannel#image: flannelcni/flannel:v0.20.2 for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: EVENT_QUEUE_DEPTHvalue: "5000"volumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/- name: xtables-lockmountPath: /run/xtables.lockvolumes:- name: runhostPath:path: /run/flannel- name: cni-pluginhostPath:path: /opt/cni/bin- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg- name: xtables-lockhostPath:path: /run/xtables.locktype: FileOrCreate

9.在master节点上应用flannel网络的配置文件

kubectl apply -f kube-flannel.yml

命令执行成功输出以下信息

 10. 在node1和node2节点上拉取 quay.io/coreos/flannel:v0.11.0-amd64 的镜像

 docker pull quay.io/coreos/flannel:v0.11.0-amd64

11. 在node1和node2节点上分别执行以下命令,将这两个节点加入Kubernet

这里根据实际的来,在master上执行命令可获取 kubeadm token create --print-join-command

kubeadm join 192.168.190.200:6443 --token 7cmfxu.smm6jqlx0llsym4p --discovery-token-ca-cert-hash sha256:4af0d23c767f2a23605747963d8d0de78082bbd8147e261469b6fb75fe136a63 

如果在单节点上执行join操作时出现错误,可以加上参数 --ignore-preflight-errors=all

加入成功

这里也可能会遇到跟2.3步骤中一样的错误,操作一样,修改docker配置文件即可

It seems like the kubelet isn‘t running or healthy 报错解决

配置docker文件,在/etc/docker/daemon.json 添加以下内容

"exec-opts": [

"native.cgroupdriver=systemd"

],

重启docker

systemctl restart docker

重启kubelet (optional)

systemctl restart kubelet

再次执行命令

kubeadm join 192.168.190.200:6443 --token 7cmfxu.smm6jqlx0llsym4p --discovery-token-ca-cert-hash sha256:4af0d23c767f2a23605747963d8d0de78082bbd8147e261469b6fb75fe136a63 

 12. 在master上查看集群节点信息(安装成功)

kubectl get nodes

查看各节点详细信息

kubectl get nodes -o wide

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

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

相关文章

QA:绑定ROS机器人控制板PCB设备ID

前言 一般情况下&#xff0c;主控板(树莓派、Jetson等)会同时和多个串口进行通信&#xff0c;这时&#xff0c;我们希望&#xff0c;用一个固定名称代表特定串口&#xff0c;比如用serial_motor_drive绑定电机驱动控制板&#xff0c;使ROS2的配置、编程和运行更加方便。 下面是…

会声会影剪刀为什么灰色 会声会影分割素材的方法 会声会影视频制作教程 会声会影2023旗舰版下载 会声会影快捷键

会声会影是一款操作简单&#xff0c;功能齐全&#xff0c;适合新手使用的视频剪辑软件。在使用会声会影剪辑的过程中&#xff0c;我们一般需要使用【剪刀工具】&#xff0c;但有时会声会影剪刀是灰色无法使用的状态&#xff0c;这个时候该怎么办呢&#xff1f;本文将为大家介绍…

个人优势能力测评,寻找你的天赋

个人优势能力测评&#xff0c;用来发现自己的天赋&#xff0c;也被称之为多元智力测评&#xff0c;该理论认为人的智力不仅仅是逻辑思维能力&#xff0c;每个人的天赋不同&#xff0c;具有多样性&#xff0c;目前的智力测试基本上都以逻辑思维&#xff0c;推理能力为主&#xf…

几种确定Windows电脑有多旧的方法,总有 一种适合你

前言 如果你正在考虑升级你的计算机&#xff0c;或者想知道你的计算机是否仍在保修期内&#xff0c;你需要知道你的电脑有多旧。谢天谢地&#xff0c;有几种方法可以做到这一点&#xff0c;但没有一种方法过于复杂。 如何判断你的计算机有多旧 除非另有说明&#xff0c;否则…

vitess执行计划缓存 测试

打开执行计划器缓存&#xff1a; sysbench /usr/local/share/sysbench/oltp_write_only.lua --mysql-host127.0.0.1 --mysql-port15306 --mysql-userroot --mysql-password --mysql-dbcustomer --report-interval10 100s sysbench /usr/local/share/sysbench/oltp_read_only.l…

Modelsim手动仿真实例

目录 1. 软件链接 2. 为什么要使用Modelsim 3. Modelsim仿真工程由几部分组成&#xff1f; 4. 上手实例 4.1. 新建文件夹 4.2. 指定目录 4.3. 新建工程 4.4. 新建设计文件&#xff08;Design Files&#xff09; 4.5. 新建测试平台文件&#xff08;Testbench Files&…

bugku-web-本地管理员

在页面源码的最右段发现一个base加密数据 dGVzdDEyMw 解密后 test123 将test作为账号123为密码尝试 说这个ip被禁止访问 那么问题应该出现在ip上 这里将请求报文抓取下来 POST / HTTP/1.1 Host: 114.67.175.224:18838 Content-Length: 18 Cache-Control: max-age0 Upgrade-Ins…

WIFI驱动移植实验:WIFI从路由器动态获取IP地址与联网

一. 简介 前面两篇文章&#xff0c;一篇文章实现了WIFI联网前要做的工作&#xff0c;另一篇文章配置了WIFI配置文件&#xff0c;进行了WIFI热点的连接。文章如下&#xff1a; WIFI驱动移植实验&#xff1a;WIFI 联网前的工作-CSDN博客 WIFI驱动移植实验&#xff1a;连接WIF…

Bun安装与使用

Bun安装与使用。 它目前无法在windows上直接安装使用&#xff0c;必须通过虚拟机安装。 在win10虚拟机中安装 # 查看内核版本 $ uname -srm Linux 6.1.0-10-amd64 x86_64# 安装unzip解压工具 $ sudo apt install unzip# 下载安装脚本并开始安装 curl -fsSL https://bun.sh/ins…

代码随想录|Day28|贪心03|1005.K次取反后最大化的数组和、134.加油站、135.分发糖果

1005.K次取反后最大化的数组和 思路&#xff1a; 优先取反 绝对值最大的负数如果没有负数&#xff0c;不断取反 绝对值最小的数&#xff0c;直到次数 K 耗尽 取反最小数有一个优化技巧&#xff1a; 如果 K 为偶数&#xff0c;则取反 K 次后&#xff0c;正负不变。如果 K 为奇数…

最大子序列(蓝桥杯,acwing,单调队列)

题目描述&#xff1a; 输入一个长度为 n 的整数序列&#xff0c;从中找出一段长度不超过 m 的连续子序列&#xff0c;使得子序列中所有数的和最大。 注意&#xff1a; 子序列的长度至少是 1。 输入格式&#xff1a; 第一行输入两个整数 n,m。 第二行输入 n 个数&#xff0…