阿里云k8s集群搭建

news2024/9/24 23:21:10

文章目录

  • 一、安装前准备
    • 1.环境
    • 2.k8s集群规划
  • 二、k8s 安装
    • 1. centos基础设置
    • 2. docker 安装
    • 3. k8s安装
      • 3.1 添加阿里云 yum 源
      • 3.2 安装 kubeadm、kubelet、kubectl
      • 3.3 部署 Kubernetes Master
      • 3.4 加入 Kubernetes Node
      • 3.5 部署 CNI 网络插件
      • 3.6 测试 kubernetes 集群

一、安装前准备

1.环境

os:centos 7.6
docker:v20+
k8s:1.23.6

2.k8s集群规划

主机名ip
192.168.113.129k8s-master
192.168.113.130k8s-node1
192.168.113.131k8s-node2

二、k8s 安装

1. centos基础设置

# 关闭防火墙
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    # 永久

# 关闭完swap后,一定要重启一下虚拟机!!!
# 根据规划设置主机名
hostnamectl set-hostname <hostname>

# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.190.129 k8s-master
192.168.190.130 k8s-node1
192.168.190.131 k8s-node2
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  # 生效

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

2. docker 安装

传送门:阿里云docker安装

3. k8s安装

3.1 添加阿里云 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

3.2 安装 kubeadm、kubelet、kubectl

yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

systemctl enable kubelet

# 配置关闭 Docker 的 cgroups,修改 /etc/docker/daemon.json,加入以下内容
# 指定docker不要使用原本的cgroupdriver
{
"exec-opts": ["native.cgroupdriver=systemd"]
}

# 重启 docker
systemctl daemon-reload
systemctl restart docker

3.3 部署 Kubernetes Master

  1. 在 Master 节点下执行
kubeadm init \
      --apiserver-advertise-address=192.168.190.129 \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version v1.23.6 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16

出现如下log信息:主节点token及cert证书如下:

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
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo 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.190.129:6443 --token 5bcjya.f11md2zfoc6vwu31 \
        --discovery-token-ca-cert-hash sha256:442becd8e42021f78c307a4bc2ae3cf15eef8313c0621d3c71be0a03cd6fc2ac 
  1. 主节点执行以下操作
# 安装成功后,复制如下配置并执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes

3.4 加入 Kubernetes Node

分别在 k8s-node1 和 k8s-node2 执行

# 下方命令可以在 k8s master 控制台初始化成功后复制 join 命令

kubeadm join 192.168.190.129:6443 --token 5bcjya.f11md2zfoc6vwu31 \
        --discovery-token-ca-cert-hash sha256:442becd8e42021f78c307a4bc2ae3cf15eef8313c0621d3c71be0a03cd6fc2ac 

加入时--v=5报错:
在这里插入图片描述
解决:加入token时加入–v=5的参数

kubeadm join 192.168.190.129:6443 --token 5bcjya.f11md2zfoc6vwu31 \
	--v=5 \
        --discovery-token-ca-cert-hash sha256:442becd8e42021f78c307a4bc2ae3cf15eef8313c0621d3c71be0a03cd6fc2ac 

注意:以上的ip、token、cert需要替换成自己的

如果初始化的 token 不小心清空了,可以通过如下命令获取或者重新申请

# 如果 token 已经过期,就重新申请
kubeadm token create

# token 没有过期可以通过如下命令获取
kubeadm token list

# 获取 --discovery-token-ca-cert-hash 值,得到值后需要在前面拼接上 sha256:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

集群还没准备好:如下图 ↓
原因:pod未指定命名空间会有个默认的命名空间;k8s集群创建的时候pod不是放在默认命名空间里面
在这里插入图片描述

查看k8s集群组件 ↓

[root@k8s-master ~]# kubectl get componentstatus
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
scheduler            Healthy   ok                              
controller-manager   Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}  

指定看哪个命名空间的pod信息 ↓

[root@k8s-master ~]# kubectl get pods -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-6d8c4cb4d-b5ps8              0/1     Pending   0          23h
coredns-6d8c4cb4d-g6zf7              0/1     Pending   0          23h
etcd-k8s-master                      1/1     Running   0          23h
kube-apiserver-k8s-master            1/1     Running   0          23h
kube-controller-manager-k8s-master   1/1     Running   0          23h
kube-proxy-6dk8z                     1/1     Running   0          23h
kube-proxy-6r8hm                     1/1     Running   0          23h
kube-proxy-gzlh2                     1/1     Running   0          23h
kube-scheduler-k8s-master            1/1     Running   0          23h

# 其中pending就是没下载下来的内容;
# coredns 多数是可能没有网络导致,calico安装完成无问题后此日期会得到解决

3.5 部署 CNI 网络插件

master节点

# 1.查看是/opt目录下是否有k8s目录,没有则创建
[root@k8s-master ~]# cd /opt/
[root@k8s-master opt]# ls
cni  containerd  docker_opt
[root@k8s-master opt]# mkdir k8s
[root@k8s-master opt]# cd k8s

#2.下载网络插件
[root@k8s-master ~]# curl  https://docs.tigera.io/calico/latest/manifests/calico.yaml -O

# 如果上面链接下载不成功执行下面的:
[root@k8s-master ~]# curl https://docs.projectcalico.org/archive/v3.23/manifests/calico.yaml -O

#3.修改下载文件calico.yaml中的值为
	- name: CALICO_IPV4POOL_CIDR
      value: "10.244.0.0/16" # 因为我上面k8s集群的网段设置是这个

#3.1 编辑文件calico.yaml
[root@k8s-master ~]# vim calico.yaml
#3.1 文件calico.yaml中查找CALICO_IPV4POOL_CIDR
#输入
:/CALICO_IPV4POOL_CIDR 
#输入完后按下n进行查找并替换


# 4.在文件中的CLUSTER_TYPE下方添加或替换指定网卡(我的网卡是eth0)
  - name: IP_AUTODETECTION_METHOD
    value: "interface=ens33"
#注意此处一定要对应自己linux的网卡对应上

# 5.删除镜像 docker.io/ 前缀,避免下载过慢导致失败
[root@k8s-master ~]#  sed -i 's#docker.io/##g' calico.yaml

# 6.查看文件中image出现的行
[root@k8s-master ~]#  grep image calico.yaml


# 7.部署k8s集群,等待k8s集群部署完成(过程需要10分钟左右),yaml修改后直接运行即更新
[root@k8s-master ~]#  kubectl apply -f calico.yaml

获取k8s集群节点信息

[root@k8s-master ~]#  kubectl get no 

获取k8s集群pod信息

[root@k8s-master k8s]# kubectl get po -n kube-system
NAME                                       READY   STATUS              RESTARTS      AGE
calico-kube-controllers-66bf87d4b8-hvd7x   0/1     ContainerCreating   0             5m17s
calico-node-r5jf8                          0/1     Init:2/3            0             5m20s
calico-node-w58bz                          0/1     Init:2/3            0             5m19s
calico-node-x5rzp                          0/1     Init:0/3            0             5m19s
coredns-6d8c4cb4d-b5ps8                    0/1     ContainerCreating   0             24h
coredns-6d8c4cb4d-g6zf7                    0/1     ContainerCreating   0             24h
etcd-k8s-master                            1/1     Running             0             24h
kube-apiserver-k8s-master                  1/1     Running             0             24h
kube-controller-manager-k8s-master         0/1     Error               0             24h
kube-proxy-6dk8z                           1/1     Running             0             24h
kube-proxy-6r8hm                           1/1     Running             0             24h
kube-proxy-gzlh2                           1/1     Running             0             24h
kube-scheduler-k8s-master                  0/1     Running             1 (28s ago)   24h

查看pod在干什么事情

[root@k8s-master k8s]# kubectl describe po calico-kube-controllers-66bf87d4b8-hvd7x

删除k8s pod

[root@k8s-master k8s]# kubectl delete pod -n kube-system -l k8s-app=calico-node

安装完成标志如下:

# 1.pod都已经running
[root@k8s-master ~]# kubectl get po -n kube-system
NAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-66bf87d4b8-7cpn4   1/1     Running   0             11m
calico-node-68hrg                          1/1     Running   0             8m7s
calico-node-jxhx4                          1/1     Running   0             8m7s
calico-node-kmlpm                          1/1     Running   0             8m7s
coredns-6d8c4cb4d-b5ps8                    1/1     Running   0             3d21h
coredns-6d8c4cb4d-g6zf7                    1/1     Running   0             3d21h
etcd-k8s-master                            1/1     Running   1 (52m ago)   3d21h
kube-apiserver-k8s-master                  1/1     Running   1 (52m ago)   3d21h
kube-controller-manager-k8s-master         1/1     Running   2 (52m ago)   3d21h
kube-proxy-6dk8z                           1/1     Running   1 (52m ago)   3d20h
kube-proxy-6r8hm                           1/1     Running   1 (52m ago)   3d21h
kube-proxy-gzlh2                           1/1     Running   1 (52m ago)   3d20h
kube-scheduler-k8s-master                  1/1     Running   2 (52m ago)   3d21h

# 2.node都已经ready
[root@k8s-master ~]# kubectl get no -n kube-system
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   3d21h   v1.23.6
k8s-node1    Ready    <none>                 3d20h   v1.23.6
k8s-node2    Ready    <none>                 3d20h   v1.23.6

3.6 测试 kubernetes 集群

以nginx为例子:

# 创建部署
kubectl create deployment nginx --image=nginx

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看 pod 以及服务信息
[root@k8s-master k8s]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        3d21h
nginx        NodePort    10.96.174.105   <none>        80:31754/TCP   10m

#测试方式1
[root@k8s-master k8s]# curl localhost:31754 
#测试方式2
[root@k8s-master k8s]# curl  192.168.190.129:31754

从节点kubectl 无法使用问题:需要配置master的apiserver地址

[root@k8s-master ~]# cd ~/.kube
[root@k8s-master .kube]# ls
cache  config
# 配置文件 config中进行配置
[root@k8s-master .kube]# 

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

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

相关文章

MATLAB - 最优控制(Optimal Control)

系列文章目录 前言 - 什么是最优控制&#xff1f; 最优控制是动态系统满足设计目标的条件。最优控制是通过执行以下定义的最优性标准的控制律来实现的。一些广泛使用的最优控制方法有&#xff1a; 线性二次调节器 (LQR)/线性二次高斯 (LQG) 控制 模型预测控制 强化学习 极值…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜A/B

老规矩&#xff0c;看目录&#xff0c;平均3-5题 文章目录 A/B2023真题&#xff08;2023-19&#xff09;-A-选项特点&#xff1a;两个等号&#xff1b;-判断需联立的难易&#xff1a;难&#xff0c;看着感觉需要联立&#xff0c;所以判断联立需要有理论支撑&#xff0c;不然还…

【AI美图】第08期效果图,AI人工智能3D效果图,让创意和想象力在一张简单的底图上绽放!

让创意和想象力在一张简单的底图上绽放 探索未来&#xff0c;体验无限可能&#xff01;我们的AI技术可以将一张简单的底图转化为令人惊叹的3D效果图&#xff0c;让你瞬间拥有超凡的视觉体验。无论是房屋建筑、汽车设计、游戏开发&#xff0c;还是艺术创作&#xff0c;我们的AI…

LabVIEW开发振动数据分析系统

LabVIEW开发振动数据分析系统 自动测试系统基于LabVIEW平台设计&#xff0c;采用了多种高级硬件设备。系统的硬件组成包括PCB振动加速度传感器&#xff0c;这是一种集成了传统压电加速度传感器和电荷放大器的先进设备&#xff0c;能够直接与采集仪器连接。此外&#xff0c;系统…

漏洞复现-亿赛通任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

鸿蒙ArkTS语言介绍与TS基础法

1、ArkTS介绍 ArkTS是HarmonyOS主力应用开发语言&#xff0c;它在TS基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等响应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 JS 是一种属于网络的高级脚本语言&#xff0c;已经被广泛用…

精通服务器远程管理:全面指南

引言 在当今数字化世界中&#xff0c;IT专业人员和管理员能够远程管理服务器的能力是无价之宝。远程服务器管理不仅提高了效率&#xff0c;而且在无法物理访问服务器的情况下确保了持续的运营。本指南将深入探讨远程管理的不同类型、远程桌面的使用方法&#xff0c;以及如何安全…

ie-tab插件平替插件IEability-Open in IE

ie-tab插件仅可试用两周&#xff0c;之后就要收费 IEability-Open in IE可以平替 IE tab 下载IEability.exe并进行安装 在浏览器的输入界面输入搜索内容&#xff0c;点击插件按钮即可进入IE模式

sectigo多域名通配符证书

多域名通配符SSL证书是一种特殊的SSL证书&#xff0c;它综合了多域名SSL证书和通配符SSL证书的特点&#xff0c;可以同时保护多个泛域名以及它的主域名&#xff0c;适合域名多&#xff0c;子域名也比较多的单个或多个站点使用。今天就随SSL盾小编了解Sectigo旗下的DV多域名通配…

Node.js 工作线程与子进程:应该使用哪一个

Node.js 工作线程与子进程&#xff1a;应该使用哪一个 并行处理在计算密集型应用程序中起着至关重要的作用。例如&#xff0c;考虑一个确定给定数字是否为素数的应用程序。如果我们熟悉素数&#xff0c;我们就会知道必须从 1 遍历到该数的平方根才能确定它是否是素数&#xff…

基于YOLOv8的结核病预测系统设计与实现

一、项目背景 本系统的目的是通过痰液图像来检测出结核杆菌的携带者&#xff0c;及时采取治疗措施&#xff0c;在病情早期对其进行相关治疗减少结核病的传播。程序使用的样本是经过染色处理可以使得结核杆菌在显微镜拍摄的医学图像&#xff0c;通过检测医学图像中的结核杆菌诊…

ros2 学习03-开发工具vscode 插件配置

VSCode插件配置 为了便于后续ROS2的开发与调试&#xff0c;我们还可以安装一系列插件&#xff0c;无限扩展VSCode的功能。 中文语言包 Python插件 C插件 CMake插件 vscode-icons ROS插件 Msg Language Support Visual Studio IntelliCode URDF Markdown All in One VSCode支持的…

架构设计到底是什么?

文章目录 架构设计有哪些内容&#xff1f;架构原理与技术认知分布式技术原理与设计中间件常用组件的原理和设计问题数据库原理与设计问题分布式缓存原理与设计问题互联网高性能高可用设计问题 技术认知架构分析问题分析能力边界 架构设计&#xff0c;是中高级研发工程师逃不开的…

什么是集成测试?它和系统测试的区别是什么? 操作方法来了

01 什么是集成测试&#xff1f; 集成测试是软件测试的一种方法&#xff0c;用于测试不同的软件模块之间的交互和协作是否正常。集成测试的主要目的是确保不同的软件模块能够无缝协作&#xff0c;形成一个完整的软件系统&#xff0c;并且能够满足系统的需求和规格。 在集成测试…

理解pom.xml中的parent标签

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

【设计模式--结构型--适配器模式】

设计模式--结构型--适配器模式 适配器模式概述结构案例类适配器模式对象适配器模式 应用场景 适配器模式 概述 将一个类的接口转换成客户希望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类适配器模式和对象适配器模式…

《opencv实用探索·二十一》人脸识别

Haar级联分类器 在OpenCV中主要使用了两种特征&#xff08;即两种方法&#xff09;进行人脸检测&#xff0c;Haar特征和LBP特征。用的最多的是Haar特征人脸检测。 Haar级联分类器是一种用于目标检测的机器学习方法&#xff0c;它是一种基于机器学习的特征选择方法&#xff0c;…

如何下载知网论文、专利的PDF格式

知网的论文格式有其特有的格式&#xff1a;CAJ。将CAJ格式转化为Word或者PDF非常麻烦&#xff0c;且会出现乱码的情况&#xff0c;直接用知网官方的CAJ浏览器也不太方便。为此&#xff0c;困扰了许久。 其实&#xff0c;知网可以直接下载PDF格式&#xff0c;只需在浏览器上安装…

【halcon深度学习】create_dl_model_detection

基本介绍 create_dl_model_detection 不是一个封装的库函数&#xff0c;是一个算子。用于创建用于目标检测或实例分割任务的深度学习模型。 输入参数&#xff1a; Backbone (input_control): 指定用作背骨网络的深度学习分类器&#xff0c;充当模型的基础。用户可以选择不同的…

贝蒂快扫雷~(C语言)

✨✨欢迎大家来到贝蒂大讲堂✨✨ ​​​​&#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;贝蒂的游戏 贝蒂的主页&#xff1a;Betty‘s blog 引言&#xff1a; 扫雷相信大家小时候到玩过吧&#xff0c;那…