K8S Centos7 安装 K8S 1.26单机版

文章目录

    • 1.机器规划
      • 1.设置hostname
      • 2.编辑/etc/hosts
      • 3.安装ntpdate并同步时间
      • 4.关闭防火墙
      • 5.关闭selinux
    • 2.安装 Docker
      • 1.安装Docker
      • 2.安装容器运行时cri-dockerd
    • 3.安装K8S
      • 1.禁用swap
      • 2.安装Kubernetes相关软件
      • 3.所有master节点拉取k8s镜像
      • 4.初始化Kubernetes Master节点
      • 5.安装网络插件
      • 6.单机版解除限制
    • 4.部署nginx
      • 1.创建命名空间
      • 2.创建Deployment+Service
      • 3.查看nginx pod service
      • 4.验证nginx
      • 5.常用命令

中文文档: https://kubernetes.io/zh-cn/docs/home/

1.机器规划

IPhostnameRole
10.224.76.114k8s-masterMaster
10.224.76.115k8s-node1Node
10.224.76.116k8s-node2Node

1.设置hostname

每台机器都执行,设置对应的hostname

# 在相应的机器上执行
#master
hostnamectl set-hostname k8s-master
#node1
hostnamectl set-hostname k8s-node1
#node2
hostnamectl set-hostname k8s-node2

2.编辑/etc/hosts

每台机器都执行

cat >> /etc/hosts << EOF
10.224.76.114 k8s-master
10.224.76.115 k8s-node1
10.224.76.116 k8s-node2
EOF

3.安装ntpdate并同步时间

yum -y install ntpdate
ntpdate ntp1.aliyun.com
systemctl start ntpdate
sustemctl enable ntpdate
systemctl status ntpdate

4.关闭防火墙

systemctl stop firewalld.service 
systemctl disable firewalld.service

5.关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久关闭

2.安装 Docker

1.安装Docker

CentOS安装Docker以及常用命令

换成国内docker仓库

cat <<EOF > /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn" // 国内镜像],"insecure-registries": ["192.168.1.10:5000"],  // 内部仓库"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 重启docker
systemctl restart docker
# 查看docker信息
docker info

2.安装容器运行时cri-dockerd

参考: https://github.com/Mirantis/cri-dockerd 可以从release版本中直接下载rpm包安装比较简单

# 下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
# 安装
rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm

配置cri-docker使用国内镜像

vim /usr/lib/systemd/system/cri-docker.service

修改配置如下:

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

启动服务

systemctl daemon-reload && systemctl start cri-docker && systemctl enable cri-docker

查看服务状态

systemctl status cri-docker

3.安装K8S

1.禁用swap

因为Kubernetes 不支持在节点上启用交换空间。

检查交换空间状态

# 查不到记录 就是没有开启
sudo swapon --show

禁用交换空间

sudo swapoff -a

永久禁用交换空间(可选):

vim /etc/fstab

在文件中注释掉交换空间的相关行:

# /swapfile none swap sw 0 0

2.安装Kubernetes相关软件

1.添加 Kubernetes 软件仓库,修改Kubernetes源

修改为阿里云源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
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.更新缓存

yum clean all
yum -y makecache
# 查看可安装版本
yum list kubelet --showduplicates | sort -r 

3.安装 kubelet、kubeadm 和 kubectl

这里安装的版本是1.26.6。
自 1.24 版起,Dockershim 已从 Kubernetes 项目中移除。即默认不支持docker了。

  • kubelet:是运行在每个 Kubernetes 节点上的代理程序,负责管理节点上的容器和 Pod。kubelet 接收来自 Master 节点的指令,根据这些指令来创建、启动、停止、监控 Pod,并与容器运行时(如 Docker)进行交互,确保 Pod 在节点上按预期运行。

  • kubeadm:用于在 Kubernetes 环境中启动和管理集群的工具。它能够帮助你进行集群的初始化、添加新节点、重置集群状态等操作,简化了集群的部署和管理过程。kubeadm 通常用于搭建 Kubernetes 集群的第一步,它可以配置集群的网络、安装核心组件等。

  • kubectl:是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互。通过 kubectl,你可以管理集群中的各种资源,如 Pod、Service、Deployment 等。它支持对集群进行部署、扩容、升级、维护等操作,是 Kubernetes 集群管理的主要工具之一。

# 卸载老版本
sudo systemctl stop kubelet
sudo yum remove kubelet kubeadm kubectl
# 清理相关文件和目录(可选)
sudo rm -rf /etc/kubernetes /var/lib/kubelet /var/lib/kube-proxy /var/lib/kubernetes /var/run/kubernetes /etc/systemd/system/kubelet.service.d
# 清理 Docker 中的容器和镜像(可选)
sudo docker rm -f $(sudo docker ps -aq)
sudo docker rmi -f $(sudo docker images -aq)# 安装指定版本
yum install -y kubelet-1.26.6-0 kubeadm-1.26.6-0 kubectl-1.26.6-0
# 检查版本信息
kubelet --version
kubectl version --output=json
kubeadm version
# 
systemctl enable kubelet
systemctl status kubelet

3.所有master节点拉取k8s镜像

kubeadm config images pull --kubernetes-version=v1.26.6 --image-repository registry.aliyuncs.com/google_containers  --cri-socket=unix:///var/run/cri-dockerd.sock
#查看镜像
docker images 

4.初始化Kubernetes Master节点

#注:10.224.76.114是本机IP地址
kubeadm init --kubernetes-version=1.26.6 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.224.76.114 --ignore-preflight-errors=all --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock
  • –kubernetes-version:指定Kubernetes的版本。
  • –pod-network-cidr: 指定pod网络的IP地址,它的值取决于你选择哪个网络,比如Flannel网络,因此值需要指定为10.244.0.0/16,因为Flannel网络相对于其他网络要简单一些,对于刚开始搭建Kubernetes集群比较友好,需要的配置较少,功能也较为完善。
  • –apiserver-advertise-address: 指定master节点发布的IP地址,如果不指定,则会自动检测网络接口,通常是内网IP。
  • –ignore-preflight-errors:检查错误将显示为检查的警告列表。值为all会忽略所有检查中的错误。
  • –image-repository:选择一个Container Registry从中拉取控制平面镜像(默认为k8s.gcr.io,这个Container Registry拉取镜像特别慢,会导致超时,换成阿里云的Container Registry)。
  • –-cri-socket:指定cri-dockerd接口,如果是containerd则使用unix:///run/containerd/containerd.sock

初始化成功日志如下:

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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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 10.224.76.114:6443 --token bca3ta.ivxr8huu3f560645 \--discovery-token-ca-cert-hash sha256:dc07fce82b93428828b7b70e5f6c024ef64c43fc4d0c50b84b95d1e5deeb16b3

配置

# 要使非 root 用户可以运行 kubectl,请运行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 如果你是root 用户,则可以运行:
export KUBECONFIG=/etc/kubernetes/admin.conf
# 如果想重新初始化,可执行kubeadm reset# 直接给它放到环境变量中,以免关闭服务器后重新启动
vim /etc/profile
#放到最后面
export KUBECONFIG=/etc/kubernetes/admin.conf
# 保存并关闭文件,然后重新加载 /etc/profile 文件以使更改生效:
source /etc/profile# 一条命令搞定
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' | sudo tee -a /etc/profile && source /etc/profile

在集群中加入node节点(仅在node节点执行)

复制上面的join token

kubeadm join 10.224.76.114:6443 --token bca3ta.ivxr8huu3f560645 \--discovery-token-ca-cert-hash sha256:dc07fce82b93428828b7b70e5f6c024ef64c43fc4d0c50b84b95d1e5deeb16b3  --cri-socket=unix:///var/run/cri-dockerd.sock

master节点生成其他节点加入的方式

kubeadm token create --print-join-command

5.安装网络插件

通常使用 Calico 或 Flannel 作为网络插件。这里以 Flannel 为例,可以通过以下命令安装 Flannel 网络插件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

获取flannel pod状态:

kubectl get pod -n kube-system

最后,我们看下node的状态:显示为Ready就表示已经OK啦

kubectl get node
kubectl get node -o wide
kubectl cluster-info
kubectl get pod --all-namespaces
# 用 kubectl describe 来查看这个节点(Node)对象的详细信息、状态和事件(Event)
kubectl describe node master
# 通过 kubectl get 重新检查 Pod 的状态:
kubectl get pods -n kube-system
# 部署过程中任何环节有问题都可以查看日志 
journalctl -l -u kubelet

6.单机版解除限制

默认k8s的master节点是不能跑pod的业务,需要执行以下命令解除限制

kubectl get nodes
#查看污点
kubectl describe node k8s-master|grep -i taints
#去除污点
kubectl taint node k8s-master1 node-role.kubernetes.io/control-plane:NoSchedule-
#再次查看污点
kubectl describe node k8s-master|grep -i taints

4.部署nginx

1.创建命名空间

# 创建命名空间
kubectl create namespace laker

2.创建Deployment+Service

kubectl apply -f nginx-k8s.yaml

nginx-k8s.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentnamespace: laker
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.23.2ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: laker
spec:ports:- nodePort: 30080port: 80protocol: TCPtargetPort: 80selector:app: nginxtype: NodePort

3.查看nginx pod service

kubectl -n laker get pod,svc -o wide

4.验证nginx

浏览器访问:http://10.224.76.114:30080

5.常用命令

# 查看 pod 
kubectl -n laker get pod -o wide
# 进入 pod 
kubectl -n laker exec -it pod名称 bash
# 编辑 pod
kubectl -n laker edit deployment nginx-deployment
# 删除 pod 
kubectl -n laker delete deployment nginx-deployment
# 编辑 Service
kubectl -n laker edit service nginx-service
# 删除 Service
kubectl -n laker delete service nginx-service
# 查看 pod、Service
kubectl -n 命名空间 get pod,svc -o wide

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

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

相关文章

MySQL-用户管理

MySQL 用户分为 普通用户 和 root用户。root用户即超级管理员&#xff0c;拥有所有权限&#xff0c;包含创建&#xff0c;删除和修改用户等相关权限&#xff1b;普通用户只拥有被root用户授予的各种权限MySQL的安全性需要通过账户管理来实现 1、登录MySQL服务器 命令如下&…

Nginx七层负载均衡

1、七层负载均衡介绍 Nginx七层负载均衡是在应用层&#xff08;HTTP/HTTPS&#xff09;上进行的&#xff0c;可以根据HTTP请求的具体内容&#xff0c;如URL、Cookie、Header等&#xff0c;来决定将请求转发到哪个后端服务器。这种方式不仅能够均衡服务器的计算负载&#xff0c…

基于微信小程序的土地租赁的设计与实现

基于微信小程序的土地租赁的设计与实现 Design and Implementation of Land Leasing Based on WeChat Mini Program 完整下载链接:基于微信小程序的土地租赁的设计与实现 文章目录 基于微信小程序的土地租赁的设计与实现摘要第一章 绪论1.1 研究背景1.2 研究目的1.3 研究内容…

C语言 字符类型

下面 我们来说字符类型 我们来看这个 保险单 金额 和 总额 都可以用数字类型 而性别则需要字符型 字符数据的存储 – ASCI码 字符类型 char 就是专为存储字符(如字母&#xff0c;标点和数字)而设计的类型。 使用单引号包含单个字符或转义字符去表示一个 char 类型的常量。 …

Lua调用函数的方式汇总

在Lua脚本语言中&#xff0c;调用函数是一种基本的操作&#xff0c;它允许代码执行在函数定义中封装的操作。Lua 提供了几种灵活的方式来调用函数&#xff0c;以适应不同的场景和需求。以下是Lua中调用函数的几种常见方式&#xff1a; 1. 基本函数调用 最简单的调用方式是使用…

李沐56_门控循环单元——自学笔记

关注每一个序列 1.不是每个观察值都是同等重要 2.想只记住的观察需要&#xff1a;能关注的机制&#xff08;更新门 update gate&#xff09;、能遗忘的机制&#xff08;重置门 reset gate&#xff09; !pip install --upgrade d2l0.17.5 #d2l需要更新import torch from tor…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 一、简单介绍 二、简单进行车牌检测和识别实现原理 …

深入理解Java消息中间件-消息的可靠性

基石&#xff1a;在分布式系统中实现消息的可靠性及其原理 在构建现代的分布式系统时&#xff0c;能否可靠地传递消息是衡量系统成功与否的一个关键。本文章旨在讨论如何实现消息的可靠性及其背后的原理&#xff0c;帮助Java技术架构师和开发者构筑一个稳固的系统。 消息可靠…

关于上传自己本地项目到GitHub的相关命令

https://www.cnblogs.com/nature161/p/15014265.html 根据教程里的来&#xff0c;主要注意这个命令&#xff1a; $ git pull --rebase origin master # 对GitHub的仓库包含了readme.md文件的情况先要执行这个命令再pull 如果你的GitHub是main分支想上传到main分支&#xff0…

Opencv_10_自带颜色表操作

void color_style(Mat& image); Opencv_10_自带颜色表操作&#xff1a; void ColorInvert::color_style(Mat& image) { int colormap[] { COLORMAP_AUTUMN, COLORMAP_BONE , COLORMAP_JET , COLORMAP_WINTER, COLORMAP_RAINBOW , COLOR…

编译器的学习

常用的编译器&#xff1a; GCCVisual CClang&#xff08;LLVM&#xff09;&#xff1a; Clang 可以被看作是建立在 LLVM 之上的一个项目, 实际上LLVM是clang的后端&#xff0c;clang作为前端前端生成LLVM IR&#xff0c;https://zhuanlan.zhihu.com/p/656699711MSVC &#xff…

Docker常用命令(镜像、容器、网络)

一、镜像 1.1 存出镜像 将镜像保存成为本地文件 格式&#xff1a;docker save -o 存储文件名 存储的镜像docker save -o nginx nginx:latest 1.2 载入镜像 将镜像文件导入到镜像库中 格式&#xff1a;docker load < 存出的文件或docker load -i 存出的文件…

程序猿成长之路之数据挖掘篇——朴素贝叶斯

朴素贝叶斯是数据挖掘分类的基础&#xff0c;本篇文章将介绍一下朴素贝叶斯算法 情景再现 以挑选西瓜为例&#xff0c;西瓜的色泽、瓜蒂、敲响声音、触感、脐部等特征都会影响到西瓜的好坏。那么我们怎么样可以挑选出一个好的西瓜呢&#xff1f; 分析过程 既然挑选西瓜有多个…

Android Studio 报错:AVD Pixel_3a_API_30_x86 is already running

在我的Android Studio和虚拟机运行时&#xff0c;我的电脑不小心关机了&#xff0c;在启动后再次打开Android Studio并运行虚拟机时发现报错。 Error while waiting for device: AVD Pixel_3a_API_30_x86 is already running. If that is not the case, delete the files at C…

c++设计模式之桥接模式(拼接组合)

桥接模式&#xff1a;就是进行拼接组装 应用举例&#xff1a; 1.定义了形状&#xff0c;抽象形状接口&#xff0c;圆&#xff0c;矩形 2.定义了颜色&#xff0c;抽象颜色接口&#xff0c;红色&#xff0c;蓝色 3&#xff0c;怎么桥接&#xff0c;抽象具体形状和具体颜色的组合…

应用部署tomcat的三种方式

由于一直在用springboot框架&#xff0c;集成了tomcat&#xff0c;快忘记如何单独部署tomcat了&#xff0c;以下&#xff0c;记录一下&#xff1a; 部署tomcat有三种方式&#xff1a; 一、方式一&#xff1a;将war包丢进webapps 这是最简单粗暴的方式&#xff1a;将web工程打…

用现成的容器来创建一个镜像,或者说再克隆一个一模一样的容器

前言&#xff1a;我在centos系统中使用docker拉取了一个centos镜像&#xff0c;并用这个镜像创建了一个hadoop容器&#xff0c;但是后面我又需要一个相同版本的hadoop镜像来创建其他容器&#xff08;比如hive容器&#xff09;&#xff0c;但是这个时候docker官网并没有对应版本…

个人投资者如何开通快速通道?

其实我们一直都在说快速通道&#xff0c;那么我们个人投资者如何才能开通快速通道呢&#xff1f; 怎样才能做到打板排序前列&#xff0c;成交速度快&#xff0c;适合高频交易呢&#xff1f; 我们一起来了解下&#xff01; 第一&#xff1a;什么是快速通道&#xff1f; 其实就…

C#基础|对象属性Property基础使用,业务特性

哈喽&#xff0c;你好&#xff0c;我是雷工。 探究OOP中属性的奥秘 认识类的属性&#xff08;Property&#xff09; 01 属性的使用 作用&#xff1a;在面向对象&#xff08;OOP&#xff09;中主要用来封装数据。 要求&#xff1a;一般采用Pascal命名法&#xff08;首字母要…

UDS的3字节故障码

在UDS的规范下面&#xff0c;使用19服务去读取故障码&#xff0c;会发现读到市面上各种车企的各种ECU中的所有的故障码读出来都是3个字节。这与前面的五位故障码占2个字节不符&#xff0c;其实读出来是3个字节就是UDS中制定的规范。 如今车企中主要采用的是三个字节的故障码。…