云攻防——「k8s部署(超超超详细版)」

admin 2025年2月18日21:03:38评论6 views字数 5740阅读19分8秒阅读模式

前言

k8s集群介绍

k8s 一个开源的用于编排云平台中多个主机上的容器化的应用,目标是让部署容器化的应用能简单并且高效的使用, 提供了应用部署,规划,更新,维护的一种机制。

云攻防——「k8s部署(超超超详细版)」

master:k8s集群的控制节点,负责整个集群的决策调度,发现和响应集群的事件

node:k8s集群的工作节点

pod:在k8s集群中,一个pod是一组共享网络和存储的容器。pod中的容器都是统一进行统一调度,并且运行在共享上下文中,一个pod被定义为一个逻辑的host,它包括一个或多个相对耦合的容器。

环境搭建

环境准备

1、三台操作系统为CentOS7的虚拟机(VM),分别代替master、node1、node2

2、硬件配置:2GB或更多,2个CPU或更多,硬盘30GB或更多

3、最好能访问外网,以防后续部署CNI网络插件报错

4、docker版本:docker-ce-18.06.1.ce-3.el7

5、k8s版本:1.18.0

开始搭建

1、配置静态IP

#这只是一个栗子,虚拟机选择的是桥接网络,三台机器的ip应该和自己主机的ip在同一个网段
#需要自己去网络设置去进行修改
master:192.168.8.106
node1:192.168.8.107
node2:192.168.8.108

#设置完后可以检查一下配置文件
#获取ip
ip addr
cat /etc/sysconfig/network-scripts/ifcfg-ens33

#配置和这个一样
#如果不一样就用vi改一下
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"  #注意这
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="dadd094d-8f0d-40f1-9ebb-69ada08bdcdb"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.8.106 #这是对应主机配置的IP
NETMASK=255.255.255.0
GATEWAY=192.168.8.1
DNS1=8.8.8.8
DNS2=114.114.114.114

配置网络相关操作(以master节点为例,node1/2是一样的操作)记得配置完重启

云攻防——「k8s部署(超超超详细版)」

云攻防——「k8s部署(超超超详细版)」

云攻防——「k8s部署(超超超详细版)」

云攻防——「k8s部署(超超超详细版)」

2、设置主机名

#修改hostname
hostnamectl set-hostname master #master节点

hostnamectl set-hostname node1 #node1节点

hostnamectl set-hostname node2 #node2节点
#查看修改结果
hostnamectl status

3、设置hosts

#修改host (每个节点都需要进行该操作)
cat <<EOF >>/etc/hosts
192.168.8.106 master
192.168.8.107 node1
192.168.8.108 node2
EOF

#遇到问题-开始不是root权限,修改失败,用下面命令切换到root权限
su -

#查看是否修改成功
cat /etc/hosts

#配置好之后,可以进行互ping,看是否能正常访问

4、安装docker

#遇到的问题
#1、时间同步
ntpdate times.aliyun.com #报错就用下面两条指令

timedatectl status #查看当前的时间地区
timedatectl set-timezone Asia/Shanghai  #设置为时区为上海

#2、镜像问题
#打开查看修改镜像配置文件
nano /etc/yum.repos.d/CentOS-Base.repo
#镜像配置 将原有的全部替换为国内源的,以防访问不到
[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

# 安装docker所需的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置阿里云的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 指定安装这个版本的docker-ce
yum -y install docker-ce-18.06.1.ce-3.el7
# 启动docker
systemctl enable docker && systemctl start docker
# 查看docker的版本看是否成功安装
docker --version

#查看docker是否已启动
systemctl status docker
#如果没有启动,会看到inactive

#配置docker镜像
nano /etc/docker/daemon.json
#输入以下内容
{
"registry-mirrors": ["https://docker.m.daocloud.io","https://p5lmkba8.mirror.aliyuncs.com","https://registry.docker-cn.com"]
}

5、修改默认配置

#关闭防火墙
systemctl disable firewalld  #禁用防火墙服务
systemctl stop firewalld     #停止防火墙服务

# 关闭selinux
# 临时禁用selinux
setenforce 0
# 方法一  若是检查SELinux状态不为disabled 采取方法二
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#sed是一个流编辑器,用于对文件进行文本替换
#-i 选项表示直接修改文件内容,而不是将结果输出到终端
#第一个命令禁用SELinux配置文件/etc/sysconfig/selinux中的SELinux设置,针对的是permissive模式。
#第二个命令禁用 /etc/selinux/config 配置文件的SELinux配置,针对的是enforcing模式

#检查SELinux状态
sestatus

# 方法二
# 编辑 /etc/selinux/config
nano /etc/selinux/config
# 找到SELINUX=enforcing将其改为SELINUX=disabled
# 保存退出并重启
reboot
# 再检查其状态

# 禁用交换分区 
swapoff -a
# 永久禁用,打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
# 验证交换分区是否禁用
free -h #若已禁用,swap部分的大小为0

# 修改内核参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

6、配置k8s

# 执行配置k8s阿里云源
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=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 安装Kubernetes 组件 kubeadm、kubectl、kubelet
# 版本有问题,最后试1.18.0可以
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 启动kubelet服务
systemctl enable kubelet 
systemctl start kubelet

#初始化k8s集群 在master节点上
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --apiserver-advertise-address 192.168.8.106 --pod-network-cidr=10.244.0.0/16 --token-ttl 0
#初始化完成后,会显示一条命令
#kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
#记住这条命令,它会在稍后用于将worker节点加入集群

# 上面安装完成后,如果部署成功,k8s会提示你输入如下命令,执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#使用kubectl命令来管理Kubernetes集群
kubectl get nodes
#此时会看到master节点处于NotReady状态

#加入worker节点
kubeadm join 192.168.8.106:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

#部署网络插件(每个节点都得执行此命令)
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml  
#确保虚拟机可以访问该链接(主机可以翻墙,虚拟机网络为桥接模式,和主机在一个网络段)

#在任意节点使用 kubectl 命令
#将master节点中/etc/kubernetes/admin.conf文件拷贝到需要运行的服务器的/etc/kubernetes目录下
scp root@master:/etc/kubernetes/admin.conf /etc/kubernetes
#在对应的服务器上配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bashrc
source ~/.bashrc
#验证
kubectl get po,svc

#启用网络插件,在每个节点都执行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#calico安装后验证是否已成功部署
kubectl get pods -n kube-system
#查看calico相关的pods是否处于running状态

#检查节点状态
kubectl get nodes
#此时,master和worker节点应该处于ready状态

如图:
云攻防——「k8s部署(超超超详细版)」

7、服务部署

# 简单部署一个 Nginx 服务用于测试 Kubernetes 集群,通过访问 (IP:暴露的端口) 得到 Nginx 的页面则说明服务部署成功。
# 创建部署
kubectl create deployment nginx --image=nginx
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看 pod 以及服务信息
kubectl get pod,svc

部署成功如图:
云攻防——「k8s部署(超超超详细版)」

总结

在 Kubernetes 部署过程中,我遇到了许多问题,比如网络问题、Master 节点初始化失败、版本不兼容等。不过,通过查阅资料和向 AI 求助,最终还是成功完成了部署,感觉还是很开心的。所以,我想将我的部署过程与大家分享,希望能对大家有所帮助。

原文始发于微信公众号(德斯克安全小课堂):云攻防——「k8s部署(超超超详细版)」

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月18日21:03:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   云攻防——「k8s部署(超超超详细版)」https://cn-sec.com/archives/3751897.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息