k8s(Kubernetes)集群部署--使用 kubeadm方式部署

2023-09-12 23:58:27

一、测试所需环境(三台均要执行)

三台服务器

master 192.168.3.101
node1 192.168.3.102
node2 192.168.3.104

二、配置准备(三台均要执行)

1. 重命名hostname、添加hosts

#将192.168.3.101的主机名改为master
hostnamectl set-hostname master && bash
#将192.168.3.102的主机名改为node1
hostnamectl set-hostname node1 && bash
#将192.168..3.104的主机名改为node2
hostnamectl set-hostname node2 && bash
#添加hosts
cat >> /etc/hosts << EOF
192.168.3.101 master
192.168.3.102 node1
192.168.3.104 node2
EOF
#查看
cat /etc/hosts

2. 关闭防火墙、selinux与swap

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
firewall-cmd --state
 
#selinux永久关闭
setenforce 0
 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat /etc/selinux/config

#swap永久关闭
swapoff --all
sed -ri 's/.*swap.*/#&/' /etc/fstab
cat /etc/fstab

3. 添加网桥过滤及内核转发配置文件

cat > /etc/sysctl.d/k8s.conf << EOF
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 net.ipv4.ip_forward = 1
EOF
#查看
cat /etc/sysctl.d/k8s.conf
#加载br_netfilter模块
modprobe br_netfilter
#查看是否加载
lsmod | grep br_netfilter
#加载网桥过滤及内核转发配置文件
sysctl -p /etc/sysctl.d/k8s.conf

4.同步时间

yum -y install ntpdate
echo "0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com" > /var/spool/cron/root
crontab -l

5.安装ipset及ipvsadm

 #安装ipset及ipvsadm
 yum -y install ipset ipvsadm
 配置ipvsadm模块加载方式
 #添加需要加载的模块
echo ' #!/bin/bash
 modprobe -- ip_vs
 modprobe -- ip_vs_rr
 modprobe -- ip_vs_wrr
 modprobe -- ip_vs_sh
 modprobe -- nf_conntrack
' > /etc/sysconfig/modules/ipvs.modules
#查看
cat /etc/sysconfig/modules/ipvs.modules
 #授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules 
bash /etc/sysconfig/modules/ipvs.modules 
lsmod | grep -e ip_vs -e nf_conntrack
#重启
reboot

配置准备完成后,所有节点都需重启

三、安装docker(三台均要执行)

1. 配置Docker CE的yum存储库

打开docker-ce.repo的文件,并将以下内容复制到文件中:

echo '
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg 
' > /etc/yum.repos.d/docker-ce.repo

保存并退出文件。

2. 安装Docker CE

运行以下命令来安装Docker CE:

yum install -y docker-ce docker-ce-cli containerd.io
#启动docker并设置开机自启
systemctl start docker  
systemctl enable docker
#查看版本
docker -v
docker compose version

3. 设置cgroup驱动,使用systemd

配置修改为如下:

#将配置写入daemon.json文件
echo '
{
    "exec-opts": ["native.cgroupdriver=systemd"]
}' > /etc/docker/daemon.json
#查看
cat /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
docker info

四、安装cri-dockerd(rpm安装)(三台均要执行)

#下载cri-dockerd安装包
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
#安装cri-dockerd
rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm
#修改镜像地址为国内,否则kubelet拉取不了镜像导致启动失败
vi /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
###########################修改内容######################
#启动cri-dockerd
systemctl daemon-reload 
systemctl start cri-docker.service
systemctl enable cri-docker.service

五、使用 kubeadm 创建集群(三台均要执行)

1. 添加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

2. 安装kubelet-1.28.0、kubeadm-1.28.0和kubectl-1.28.0

#安装kubelet、kubeadm、kubectl
yum install -y kubelet-1.28.0 kubeadm-1.28.0  kubectl--1.28.0  --disableexcludes=kubernetes

#将cgroup改为systemd
echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' > /etc/sysconfig/kubelet
#查看
cat /etc/sysconfig/kubelet
#设置开机启动
systemctl restart kubelet.service
systemctl enable kubelet.service

3. 部署master和node节点

  1. 部署master节点,在192.168.3.101执行,初始化master节点
kubeadm init \
  --apiserver-advertise-address=192.168.3.101\
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all

–apiserver-advertise-address=192.168.3.101 :集群的主节点IP地址
–image-repository registry.aliyuncs.com/google_containers:指定容器镜像的仓库地址。
–kubernetes-version v1.28.0:指定要使用的Kubernetes版本。
–service-cidr=10.90.0.0/16:指定服务网络的CIDR范围。
–pod-network-cidr=10.240.0.0/16:指定Pod网络的CIDR范围。
–cri-socket=unix:///var/run/cri-dockerd.sock:不可缺少

执行成功后会产生如下的命令参数(需要分别在本机和各node节点执行):

[addons] Applied essential addon: kube-proxy
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.3.101:6443 --token xrnhnh.37cn3fcsltg7e90h --discovery-token-ca-cert-hash sha256:fb68fac112fd55ddb45c691a5b9db98a9bf15ce86a0244641cd787654aa3cf40

在本机(master)执行

mkdir -p $HOME/.kube 
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/.kube/config   
  1. 部署node节点
    将master节点产生的命令输到各个node节点
kubeadm join 192.168.3.101:6443 --token xrnhnh.37cn3fcsltg7e90h \
        --discovery-token-ca-cert-hash sha256:fb68fac112fd55ddb45c691a5b9db98a9bf15ce86a0244641cd787654aa3cf40 \
        --cri-socket=unix:///var/run/cri-dockerd.sock  #此行不可缺少

六、安装网络插件calico(master节点)

wget https://docs.projectcalico.org/manifests/calico.yaml

#修改calico.yaml找到CALICO_IPV4POOL_CIDR
vi calico.yaml
##############修改内容###################
 value: "10.244.0.0/16"
 ##############修改内容###################
 #在master节点上安装calico
 kubectl apply -f calico.yaml
#查看所有的节点
kubectl get nodes
kubectl get nodes -o wide
#查看集群健康情况
 kubectl get cs

七、安装nginx进行测试

#创建Nginx程序
kubectl create deployment nginx --image=nginx
#开放80端口
kubectl expose deployment nginx --port=80 --type=NodePort
#查看pod状态
kubectl get pod
#查看service状态
kubectl get service
##########################################################################
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        5d1h
nginx        NodePort    10.98.221.224   <none>        80:32743/TCP   23s
##########################################################################
#访问网页测试(端口号以查看service状态得到的为准)
http://192.168.3.101:32743/

成功界面如下
在这里插入图片描述


点击链接查看Kubernetes Dashboard安装部署教程
https://blog.csdn.net/AMCUL/article/details/132865544

更多推荐

阿里云国际站服务器设置自动开关机的攻略

关于需求在特定时间段内主动发动服务器的用户来说非常有用,比如在夜间或周末主动封闭服务器以节约资源。阿里云服务器主动开关机设置方法如下:1.登录阿里云操控台,进入云服务器ECS实例办理页面。2.在实例列表中找到需求设置主动开关机的服务器,点击“办理”按钮。3.在弹出的办理页面中,找到“主动发动”选项,点击“修改”。4.在

阿里云国际站云服务器数据备份方法有哪些?

阿里云国际站云服务器是一种根据云计算技术的虚拟服务器,它能够经过互联网提供计算资源和服务。在运用云服务器的过程中,数据备份是非常重要的一个环节。本文将介绍云服务器数据备份的办法,包含手动备份、主动备份和数据同步。一、手动备份手动备份是将数据复制到另一台服务器或外部存储设备的过程。这种办法适用于数据量较小的场景,能够手动

如何在微信上制作自己的小程序卖东西

在当今的数字化时代,微信小程序已成为电商行业的重要平台。本文将详细解析电商微信小程序的制作流程,帮助你了解从零到上线的过程。一、前期准备1.确定商城定位和目标群体:在制作电商微信小程序前,你需要明确商城的定位,如销售什么产品、面向哪些用户群体等。同时,了解目标群体的需求和习惯,以便进行针对性设计。二、制作流程1.登录乔

基于微信小程序的个人健康管理系统的设计与实现(源码+lw+部署文档+讲解等)

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

Unity丨移动相机朝向目标并确定目标在摄像机可视范围内丨摄像机注释模型丨摄像机移动丨不同尺寸模型优化丨

文章目录问题描述功能展示技术细节小结问题描述本文提供的功能是摄像机朝向目标移动,并确定整个目标出现在摄像机视角内,针对不同尺寸的模型优化。功能展示提示:这里可以添加技术名词解释技术细节直接上代码usingUnityEngine;publicclassCameraController:MonoBehaviour{publ

mybati缓存了解

title:“mybati缓存了解”createTime:2021-12-08T12:19:57+08:00updateTime:2021-12-08T12:19:57+08:00draft:falseauthor:“ggball”tags:[“mybatis”]categories:[“java”]descripti

软键盘控制cesium相机移动旋转

1.有航向类似于控制飞机飞行<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=devi

刷题笔记25——图论课程表

为了最终理解你所不理解的,你必须经历一条愚昧无知的道路。为了占有你从未占有的东西,你必须经历被剥夺的道路。为了达到你现在所不在的名位,你必须经历那条你不在其中的道路。——艾略特797.所有可能的路径(已经告知:是有向无环图,所以不需要设置visited)非常奇妙,我最初的错误是如下,在找到目标节点后直接加入到res中,

混合应用比原生应用优越在哪里?

随着移动应用和桌面应用市场的不断发展,开发者们一直在寻找一种能够在多个平台上快速构建应用的方法。传统上,原生应用开发被视为性能最佳的选择,纯粹的原生应用通常是一种依赖于平台的GUI程序,它使用特定操作系统的本地开发语言和GUI框架。但近年来,跨平台混合应用的崭露头角,逐渐取代了性能优先的原生应用。本文将深入探讨这一趋势

安全线程的集合

1.CopyOnWriteArrayListpackagecom.kuang.unsafe;importjava.util.*;importjava.util.concurrent.CopyOnWriteArrayList;//java.util.ConcurrentModificationException并发修改异

Spring高手之路13——BeanFactoryPostProcessor与BeanDefinitionRegistryPostProcessor解析

文章目录1.BeanFactoryPostProcessor概览1.1解读BeanFactoryPostProcessor1.2.如何使用BeanFactoryPostProcessor2.BeanDefinitionRegistryPostProcessor深入探究2.1解读BeanDefinitionRegistr

热文推荐