Kubernetes/K8s集群1.23.6搭建

news2024/12/23 16:06:57

1 集群规划

HostnameIP角色
centos702192.168.131.102master
centos704192.168.131.104node
centos705192.168.131.105node

2 安装步骤

初始操作和安装基础软件每个节点都要执行。

2.1 初始操作

2.1.1 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2.1.2 关闭 SELinux
# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时
setenforce 0
2.1.3 关闭 swap
# 临时
swapoff -a
# 永久
sed -ri 's/.*swap.*/#&/' /etc/fstab

关闭swap后需要重启

2.1.4 设置主机名
hostnamectl set-hostname <hostname>
2.1.5 添加 hosts
cat >> /etc/hosts << EOF
192.168.131.102 centos702
192.168.131.104 centos704
192.168.131.105 centos705
EOF
2.1.6 将桥接的 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
2.1.7 时间同步
yum install ntpdate -y
ntpdate time.windows.com

2.2 安装基础软件

2.2.1 Docker

https://blog.csdn.net/weixin_43724577/article/details/139773553

修改Docker配置文件

vim /etc/docker/daemon.json

增加一个新的配置,关闭cgroup

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

重启Docker kubelet

systemctl daemon-reload
systemctl restart docker
2.2.2 添加阿里云 K8s yum 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
2.2.3 安装 kubelet kubeadm kubectl
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet

查看kubelet状态

systemctl status kubelet

报错

● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: activating (auto-restart) (Result: exit-code) since Thu 2024-08-08 14:53:04 CST; 1s ago
     Docs: https://kubernetes.io/docs/
  Process: 2245 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
 Main PID: 2245 (code=exited, status=1/FAILURE)

Aug 08 14:53:04 centos702 systemd[1]: Unit kubelet.service entered failed state.
Aug 08 14:53:04 centos702 systemd[1]: kubelet.service failed.

查看日志

journalctl -xefu kubelet
Aug 08 14:55:27 centos702 kubelet[2347]: E0808 14:55:27.692085    2347 server.go:205] "Failed to load kubelet config file" err="failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file \"/var/lib/kubelet/config.yaml\", error: open /var/lib/kubelet/config.yaml: no such file or directory" path="/var/lib/kubelet/config.yaml"

这个是因为没初始化,所以没有这个文件/var/lib/kubelet/config.yaml 执行后面的初始化就好了。

在执行初始化之后,再次查看kubelet日志

Aug 08 15:44:36 centos702 kubelet[5549]: E0808 15:44:36.264239    5549 server.go:302] "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""

查看Docker的Cgroup Driver

docker info | grep "Cgroup Driver"

修改Docker配置文件

vim /etc/docker/daemon.json

增加一个新的配置

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

重启Docker kubelet

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

重置kubeadm

kubeadm reset

2.3 部署 Master

在Master节点执行

kubeadm init \
--apiserver-advertise-address=192.168.131.102 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.233.0.0/16

如下信息提示初始化成功,仔细看,里面说了如何配置config,如何加入node。

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.131.102:6443 --token 1xuyt0.tdrx369a2vtjwq4o \
        --discovery-token-ca-cert-hash sha256:0fe1a9ed96e0c28c7b8e4fa84ca9883d6e5d5c5f5a519df1e988831a4361ac7a

之后复制配置文件

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

2.4 加入 Node

在node节点执行之前初始化master成功后的提示信息

kubeadm join 192.168.131.102:6443 --token 1xuyt0.tdrx369a2vtjwq4o \
        --discovery-token-ca-cert-hash sha256:0fe1a9ed96e0c28c7b8e4fa84ca9883d6e5d5c5f5a519df1e988831a4361ac7a
# 如果token不小心清空了,可通过如下命令获取
kubeadm token create --print-join-command

去master查看nodes

kubectl get nodes
kubectl get componentstatus
kubectl get pods -n kube-system

2.5 部署 CNI 网络插件

在master节点上执行

# 下载 calico 配置文件,可能会超时
mkdir /opt/k8s
cd /opt/k8s

curl https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml -O

# 修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与master初始化cidr相同 2.3中的 --pod-network-cidr=10.233.0.0/16

# 找到 calico.yaml 所有的镜像
grep image calico.yaml
sed -i 's#docker.io/##g' calico.yaml

# 构建
kubectl apply -f calico.yaml

kubectl get po -n kube-system

kubectl describe po calico-kube-controllers-cd8566cf-hjjzm -n kube-system

kubectl get nodes

2.6 测试 kubernetes 集群

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

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

# 查看 pod 以及服务信息
kubectl get pod,svc
[root@centos702 ~]# kubectl get pod,svc
NAME                         READY   STATUS      RESTARTS   AGE
pod/nginx-85b98978db-rq5gm   0/1     Completed   0          45h

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        5d22h
service/nginx        NodePort    10.107.196.178   <none>        80:30435/TCP   45h
# 测试
curl 192.168.131.102 30435

浏览器打开http://192.168.131.102:30435/ 和 http://192.168.131.104:30435/

在这里插入图片描述

2.7 在任意节点使用 kubectl

在 master 拷贝 conf 文件

scp /etc/kubernetes/admin.conf root@192.168.131.104:/etc/kubernetes/

在 node 配置环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

3 kubectl 命令

官方文档:

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

–help

3.1 资源操作

创建对象

kubectl create -f manifest.yaml
kubectl create -f ./dir
kubectl create -f https://git.io/vPieo
kubectl run nginx --image=nginx

scale 资源

kubectl scale --replicas=3 rs/foo
kubectl scale --replicas=3 -f foo.yaml
kubectl scale --curent-replicas=2 --replicas=3 deployment/
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
[root@centos702 .kube]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-85b98978db-lgdgn   1/1     Running   0          84m
[root@centos702 .kube]# kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           46h
[root@centos702 .kube]# kubectl scale deploy --replicas=2 nginx
deployment.apps/nginx scaled
[root@centos702 .kube]# kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   2/2     2            2           46h
[root@centos702 .kube]# kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE        NOMINATED NODE   READINESS GATES
nginx-85b98978db-25b8q   1/1     Running   0          59s   10.233.215.16   centos704   <none>           <none>
nginx-85b98978db-lgdgn   1/1     Running   0          87m   10.233.215.15   centos704   <none>           <none>

命名空间

kubectl get ns

deployment

kubectl get deploy

3.2 资源类型的别名

pods po

deployments deploy

services svc

namespace ns

nodes no

3.3 格式化输出

# 获取deployment的信息,输出为yaml文件
kubectl get deploy nginx -o yaml

4 API

官方文档:

https://kubernetes.io/zh-cn/docs/reference/using-api/

4.1 类型

Alpha Beta Stable

4.2 废弃 API 说明

https://kubernetes.io/docs/reference/using-api/deprecation-guide/

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

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

相关文章

单元训练06:独立按键的扩展应用

蓝桥杯 小蜜蜂 #include "stc15f2k60s2.h"// 定义LED打开 #define LED(x) \{ \P0 x; \P2 P2 & 0x1f | 0x80; \P2 P2 & 0x1f; \}// 以位数来定义第1、2至6个灯&#xff0c;注意&#xff…

发两张Pop!_OS 24.04-alpha版本截图

发两张Pop!_OS 24.04-alpha版本截图

《Linux运维总结:基于x86_64架构CPU使用docker-compose一键离线部署etcd 3.5.15容器版分布式集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面对不同的客户部署业务系统&#xff0…

flink文档刨析

flink任务运行方式 flink任务提交方式有3种 session、per-job、application三种 flink任务运行底座也有三种&#xff0c;Standalone、yarn、k8s 原则上一个flink任务运行的方式由3*39种&#xff0c;但是有些是没法搭配的 yarn&#xff1a;包括yarn-session 、yarn-per-job 、…

vue2+OpenLayers 天地图上凸显出当前地理位置区域(4)

凸显出当前区域 需要当前地方的json数据 这个可以在阿里的这个阿里 看下效果图 遮盖层的逃命都是可以调的 引入 下面一段代码 import sx from "/views/json/sx1.json"; // 下载的json import GeoJSON from "ol/format/GeoJSON"; // ol的一些方法 imp…

C++ | Leetcode C++题解之第335题路径交叉

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isSelfCrossing(vector<int>& distance) {int n distance.size();// 处理第 1 种情况int i 0;while (i < n && (i < 2 || distance[i] > distance[i - 2])) {i;}if (i n) {ret…

郊游、旅游管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

汽车4S店管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

微信小程序--26(全局配置-1)

一、全局配置文件 1.标志 app.json 2.配置项 pages 记录当前小程序所有页面的存放路径 window 全局配置小程序窗口配置 tabBar 设置小程序底部的tabBar效果 style 是否启用新版本的组将样式 3.window 导航栏区域 navigationBar …

计算机学生高效记录并整理编程学习笔记的方法

哪些知识点需要做笔记&#xff1f; 以下是我认为计算机学生大学四年可以积累的笔记。 ① 编程语言类&#xff08;C语言CJava&#xff09;&#xff1a;保留课堂笔记中可运行的代码部分&#xff0c;课后debug跑一跑。学习语言初期应该多写代码&#xff08;从仿写到自己写&#…

LeetCode - 88 合并两个有序数组(Java JS Python C C++)

题目来源 88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使…

解决Tomcat 10启动日志乱码及在IntelliJ IDEA中控制台输出乱码的问题

目录 一.背景: 二.出现乱码的原因: 三.Tomcat解决乱码过程: 四.IDEA解决乱码效果: 五.Tomcat的优点和缺点: 一.背景: 在Tomcat启动起来的时候&#xff0c;界面就会出现很多的繁体字根本不知道是什么意思&#xff0c;相信大家看了也很是头痛。 还有一个是在IDEA控制台出现的…

触摸感应芯片原厂/抗干扰2路2通道触摸/双通道触摸方案VK3602XS SOP8

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK3602XS 封装形式&#xff1a;SOP8 概述 VK3602XS具有2个触摸按键&#xff0c;可用来检测外部触摸按键上人手的触摸动作。该芯片具有 较高的集成度&#xff0c;仅需极少的外部组件便可实现触摸按键的检测。 提供了2…

进程空间回收和线程

一.进程空间的回收 1.wait pid_t wait(int *status); 功能&#xff1a;该函数可用于阻塞等待任意子进程退出并回收进程的状态 参数&#xff1a;status进程退出时候的状态 如果不关心其退出状态一般用NULL表示 如果要回收进程退出状态&#xff0c;WEXITATUS回收 返回值&…

虚幻5|入门AI行为树,建立敌人

本章分成两块部分一块是第一点的制作一个简单的AI&#xff0c;后面第二点之后是第二部分建立ai行为树。这两个部分是一个衔接&#xff0c;最好不要跳看 一&#xff0c;制作一个简单的AI 1.首先&#xff0c;我们创建一个敌人的角色蓝图&#xff0c;添加一个场景组件widget用于…

django快速实现个人博客(附源码)

文章目录 一、工程目录组织结构二、模型及管理实现1、模型2、admin管理 三、博客展现实现1、视图实现2、模板实现 四、部署及效果五、源代码 Django作为一款成熟的Python Web开发框架提供了丰富的内置功能&#xff0c;如ORM&#xff08;对象关系映射&#xff09;、Admin管理界面…

鸿蒙(API 12 Beta3版)【使用投播组件】案例应用

华为视频接入播控中心和投播能力概述** 华为视频在进入影片详情页播放时&#xff0c;支持在控制中心查看当前播放的视频信息&#xff0c;并进行快进、快退、拖动进度、播放暂停、下一集、调节音量等操作&#xff0c;方便用户通过控制中心来操作当前播放的视频。 当用户希望通…

Immutable-持久化数据结构:助力 React 性能提升

React 更新 state 时为什么要使用 Immutable 语法&#xff1f;Immutable 可持久化数据结构 是什么&#xff1f;如何在 React 项目中使用相关 Immutable 类库&#xff1f; 从 useState 说起 状态更新流程 &#x1f4e2; setState(value) React 内部流程&#xff1a; #mermaid-…

ubuntu下使用docker和socket进行数据交互记录

ubuntu下使用docker和socket进行数据交互记录 概述&#xff1a;主要实现了在宿主机上通过8000端口传递一张图像给docker镜像&#xff0c;然后镜像中处理后&#xff0c;通过8001端口回传处理后的图像给宿主机。 第一章、构建镜像 一、dockerfile文件 1.拉取ubuntu20.04镜像 …

【前端面试】挖掘做过的nextJS项目(下)

https://blog.csdn.net/weixin_43342290/article/details/141170360?spm1001.2014.3001.5501文章浏览阅读105次。需求:快速搭建宣传官网1.适应pc、移动端2.基本的路由跳转3.页面渲染优化4.宣传的图片、视频资源的加载优化5.seo优化全栈react web应用、tailwind css原子工具的支…