██ 环境准备【所有节点】

■ 关闭防火墙、selinux

systemctl stop firewalld

setenforce 0

■ 关闭 swap

swapoff -a

fstab 注释掉 swap 的自动挂载

确认 swap 为0

free -m

■ 设置主机名

hostnamectl set-hostname

在master添加hosts:

cat >> /etc/hosts << EOF

192.168.222.21 node5

192.168.222.22 node6

192.168.222.23 node7

EOF

■ 将桥接的IPv4流量传递到iptables的链:

cat > /etc/sysctl.d/k8s.conf << EOF

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

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

EOF

sysctl --system

■ 设置时区、时间同步等

██ 安装Docker/kubeadm/kubelet【所有节点】

■ 修改系统自带的源镜像地址为阿里云地址

备份源镜像地址

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

改为阿里云地址

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

■ 安装Docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

yum -y install docker-ce-18.06.1.ce-3.el7

systemctl enable docker && systemctl start docker

docker --version

查看可用的版本,安装最新版,安装时间2022-05-30

yum list docker-ce --showduplicates

yum -y remove docker-ce-18.06.1.ce-3.el7

yum -y install docker-ce-20.10.16-3.el7

yum -y remove docker-ce-20.10.16-3.el7

yum -y install docker-ce-19.03.15-3.el7

■ 配置镜像仓库地址

cat > /etc/docker/daemon.json << EOF

{

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

"exec-opts":["native.cgroupdriver=systemd"]

}

EOF

■ 重启docker

systemctl status docker

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

■ 添加 k8s yum 源

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

■ 安装 kubelet,kubeadm,kubectl

yum list kubelet --showduplicates

yum list kubeadm --showduplicates

yum list kubectl --showduplicates

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

yum remove -y kubelet kubeadm kubectl

yum install -y kubelet-1.20.1 kubeadm-1.20.1 kubectl-1.20.1

yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1

systemctl status kubelet

systemctl enable kubelet

systemctl start kubelet

TIPS:k8s集群还未拉起,故这里的kubelet是无法启动的,等master初始化时会自动拉起

██ 部署 k8s master

kubeadm init

--apiserver-advertise-address=192.168.222.21

--image-repository registry.aliyuncs.com/google_containers

--kubernetes-version v1.23.1

--service-cidr=10.92.0.0/12

--pod-network-cidr=10.220.0.0/16

--ignore-preflight-errors=all

初始化成功会输出类似如下信息:

Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.222.21:6443 --token plfz4s.m574ak0ryby28q6o \
--discovery-token-ca-cert-hash sha256:ea7fe9e638b97215c3f656c4cb7988ef876a9a69217b7663ef33680e414df6e5 \
--ignore-preflight-errors=all

使用kubectl命令查看状态:

kubectl get nodes

node节点使用 kubectl 命令,需用scp命令分别拷贝config文件至对应目录方可:

mkdir -p $HOME/.kube

scp node5:/etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u)(id -g) $HOME/.kube/config

██ 部署 k8s node

在node节点中执行 master init 后产生的加入命令:

【如上】

TIPS:这里加入node后会看到node状态为NotReady,是因为没有安装CNI,kubelet无法通过网络给apiserver上报node状态,安装CNI后即可恢复

kubectl get nodes
NAME STATUS ROLES AGE VERSION
node5 NotReady master 16h v1.18.0
node6 NotReady <none> 6m55s v1.18.0
node7 NotReady <none> 42s v1.18.0

██ 部署网络插件【CNI】

wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate

下载完成后,修改、定义Pod网络:CALICO_IPV4POOL_CIDR, 需与前面master初始化时配置一样(参数 pod-network-cidr)

- name: CALICO_IPV4POOL_CIDR

value: "192.168.0.0/16"

修改完成后应用报错如下:

kubectl apply -f calico.yaml

报错如下:【2022-05-28】

[root@node6:0 ~]# kubectl apply -f calico.yaml

error: unable to recognize "calico.yaml": no matches for kind "PodDisruptionBudget" in version "policy/v1"

可见网络插件无法部署,看上去是calico版本问题导致,后续根据错误日志,反复测试不同版本,最终确认docker版本19.03.15与kubelet版本1.23.1是匹配的,可以顺利配置calico网络接口。

应用成功后,可以看到CNI POD正在初始化中,静待拉起~~~

calico running 状态后,查看节点已全部 Ready

██ 以下是node6的操作日志,可以看到网络插件部署、初始化、成功的全过程。

[root@node6:0 ~]# kubectl apply -f calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
poddisruptionbudget.policy/calico-kube-controllers created [root@node6:0 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node5 NotReady control-plane,master 5m50s v1.23.1
node6 NotReady <none> 3m43s v1.23.1 [root@node6:0 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-6b77fff45-cwtd2 0/1 Pending 0 61s
calico-node-5nw2r 0/1 Init:0/2 0 61s
calico-node-fl272 0/1 Init:0/2 0 61s
coredns-6d8c4cb4d-fwxk2 0/1 Pending 0 6m17s
coredns-6d8c4cb4d-ql29c 0/1 Pending 0 6m17s
etcd-node5 1/1 Running 0 6m30s
kube-apiserver-node5 1/1 Running 0 6m32s
kube-controller-manager-node5 1/1 Running 0 6m31s
kube-proxy-gzdfk 1/1 Running 0 6m17s
kube-proxy-k8vmn 1/1 Running 0 4m27s
kube-scheduler-node5 1/1 Running 0 6m30s [root@node6:0 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-6b77fff45-cwtd2 0/1 ContainerCreating 0 3m48s
calico-node-5nw2r 0/1 PodInitializing 0 3m48s
calico-node-fl272 0/1 PodInitializing 0 3m48s
coredns-6d8c4cb4d-fwxk2 0/1 ContainerCreating 0 9m4s
coredns-6d8c4cb4d-ql29c 0/1 ContainerCreating 0 9m4s
etcd-node5 1/1 Running 0 9m17s
kube-apiserver-node5 1/1 Running 0 9m19s
kube-controller-manager-node5 1/1 Running 0 9m18s
kube-proxy-gzdfk 1/1 Running 0 9m4s
kube-proxy-k8vmn 1/1 Running 0 7m14s
kube-scheduler-node5 1/1 Running 0 9m17s [root@node6:0 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-6b77fff45-cwtd2 1/1 Running 0 9m48s
calico-node-5nw2r 1/1 Running 0 9m48s
calico-node-fl272 1/1 Running 0 9m48s
coredns-6d8c4cb4d-fwxk2 1/1 Running 0 15m
coredns-6d8c4cb4d-ql29c 1/1 Running 0 15m
etcd-node5 1/1 Running 0 15m
kube-apiserver-node5 1/1 Running 0 15m
kube-controller-manager-node5 1/1 Running 0 15m
kube-proxy-gzdfk 1/1 Running 0 15m
kube-proxy-k8vmn 1/1 Running 0 13m
kube-scheduler-node5 1/1 Running 0 15m [root@node6:0 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node5 Ready control-plane,master 17m v1.23.1
node6 Ready <none> 15m v1.23.1

k8s集群部署初体验的更多相关文章

  1. 边缘计算k8s集群SuperEdge初体验

    前言 手上一直都有一堆的学生主机,各种各样渠道途径拿来的机器. 一直管理里面都比较蛋疼,甚至也不太记得住它们在哪是什么IP,管理起来很是头疼. 有阵子空闲的时候想折腾了一下边缘计算集群方案. 希望能把 ...

  2. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  7. (视频)asp.net core系列之k8s集群部署视频

    0.前言 应许多网友的要求,特此录制一下k8s集群部署的视频.在录制完成后发现视频的声音存在一点瑕疵,不过不影响大家的观感. 一.视频说明 1.视频地址: 如果有不懂,或者有疑问的欢迎留言.视频分为两 ...

  8. 在k8s集群部署SonarQube

    目录 1.2.存储环境 1.3.sonarqube版本 2.部署sonarqube 2.1.部署PostgreSQL 2.2.部署SonarQube 2.3.访问检查 SonarQube 是一款用于代 ...

  9. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  10. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

随机推荐

  1. 在命令行按下tab键之后, 发生了生么?

    1. 引言 2. complete命令 3. 自定义补全列表 4. 动态补全列表 5. compgen命令 6. 别名的自动补全 7. 补全规则永久生效 8. 自动加载 9. 参考 1. 引言 当我们 ...

  2. 获取邮箱(QQ、126、163)的客户端授权码

    获取QQ邮箱的客户端授权码 1.首先登录QQ邮箱(https://mail.qq.com),然后,点击"设置"按钮. 2.点击"账户"按钮,进入"账户 ...

  3. vCenter报错:Vmware vAPI Endpoint

    vCenter报错:Vmware vAPI Endpoint 问题现象: 平台警报1:设备管理运行状况警报 平台警报2:Vmware vAPI Endpoint服务运行状况警报 vcenter版本:v ...

  4. 什么是 CSR、SSR、SSG、ISR - 渲染模式详解

    本文以 React.Vue 为例,介绍下主流的渲染模式以及在主流框架中如何实现上述的渲染模式. 前置知识介绍 看渲染模式之前我们先看下几个主流框架所提供的相关能力,了解的可跳到下个章节. 挂载组件到 ...

  5. PB从入坑到放弃(一)第一个HelloWorld程序

    前言 网上关于PowerBuilder的资料确实是少之又少. 为了方便,后面我们都用pb 来代替PowerBuilder 说到这不得不来说说自己的pb入坑经历, 自己也不是计算机科班出生. 刚到公司面 ...

  6. 基于JavaFX的扫雷游戏实现(二)——游戏界面

      废话环节:看过上期文章的小伙伴现在可能还是一头雾水,怎么就完成了核心内容,界面呢?哎我说别急让我先急,博主这不夜以继日地肝出了界面部分嘛.还是老规矩,不会把所有地方都照顾到,只挑一些有代表性的内容 ...

  7. Android实时获取摄像头画面传输至PC端

    前言 最近在做一个PC端小应用,需要获取摄像头画面,但是电脑摄像头像素太低,而且位置调整不方便,又不想为此单独买个摄像头.于是想起了之前淘汰掉的手机,成像质量还是杠杠的,能不能把手机摄像头连接到电脑上 ...

  8. Go 语言 for-range 的两个坑,你踩过吗?

    坑一:迭代时协程引用索引和值 先看看下面的例子,你知道最终输出的结果是什么吗? package main import ( "fmt" "time" ) fun ...

  9. [CF 1780B] GCD Partition

    B. GCD Partition 题意 : 给一个长度为n的序列, 并将其分成连续的k块(k > 1), 得到序列b, 使得 \(gcd(b_{1}, b_{2}, b_{3}, ..., b_ ...

  10. 一:wince 开发环境

    1:下载相关文件,vs2008 可以自行搜索安装 链接:https://pan.baidu.com/s/1b2shwCqmc1o9x-zsy8CmeA 提取码:qing