freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

基于ubuntu的k8s集群环境搭建
2024-01-03 18:02:12

基于ubuntu的k8s集群环境搭建

先安装ubuntu,前面就不多说了,正常安装即可

微信图片_20231227112318

记得关闭防火墙

sudo ufw status
sudo ufw disable

关闭swap,k8s运行的时候不能开启swap

临时关闭

swapoff -a

永久关闭

vim /etc/fstab

将最后一行注释掉

微信图片_202312271132021

正常安装docker

apt install -y docker.io

微信图片_20231227113310

写个 install.sh 文件,然后使用

#!/bin/bash
apt update && apt install apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt-get update
apt-cache madison kubelet kubectl kubeadm |grep '1.22.7-00'
apt install -y kubelet=1.22.7-00 kubectl=1.22.7-00 kubeadm=1.22.7-00
sh install.sh 

来进行统一的安装(可能有问题,这里往后面看有解决方法)

微信图片_20231227113531

微信图片_20231227113540

换源为中科大或者阿里云(参考这个 https://blog.csdn.net/u011198687/article/details/121103821)

微信图片_20231227113757

如果报错gpg错误,使用如下命令,如果没有报错就不用管

微信图片_20231227114430

微信图片_20231227114652

安装完成

再次禁用swap


vim /etc/default/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
systemctl daemon-reload && systemctl restart kubelet

修改cgroup管理器

ubuntu 系统,debian 系统,centos7 系统,都是使用 systemd 初始化系统的。systemd 这边已经有一套 cgroup 管理器了,如果容器运行时和 kubelet 使用 cgroupfs,此时就会存在 cgroups 和 systemd 两种 cgroup 管理器。也就意味着操作系统里面存在两种资源分配的视图,当操作系统上存在 CPU,内存等等资源不足的时候,操作系统上的进程会变得不稳定。

vim /etc/docker/daemon.json 

阿里云的在https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

{
"exec-opts": [
"native.cgroupdriver=systemd"
],
"registry-mirrors": ["https://vtzcml68.mirror.aliyuncs.com"] #注意这个用自己的
}

微信图片_20231227114818

微信图片_20231227114851

然后重新加载kubectl

systemctl restart docker
systemctl restart kubelet

创建worker节点

这里创建的是 k8s-worker1和k8s-worker2

  • 先将k8s-master关机

  • 然后在库的界面对k8s-master右键 --> 管理 --> 克隆

  • 然后选择链接克隆,建议新开一个文件夹来存放

微信图片_20231227115131

分别设置worker节点hostname

hostnamectl set-hostname k8s-worker1

微信图片_20231227115502

worker2一样的,需要改一下数字

查看版本是否安装成功

kubectl version

微信图片_20231227115613

初始化k8s集群

回到master结点,执行如下命令

kubeadm init \
--kubernetes-version=v1.22.7 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.24.0.0/16 \
--ignore-preflight-errors=Swap
# 直接全部一起复制到命令行中

微信图片_20231227123103

这里就是成功了

并且记录得到的信息,就是 image-20240103173733440

执行 .kube的配置

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

配置calico网络

curl  https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O 
kubectl apply -f calico.yaml

微信图片_20231227123211

微信图片_20231227123333

微信图片_20231227123358

这个时候整个集群只有一个结点,就是master微信图片_20231227123415

在其他两个,也就是 k8s-worker1和k8s-worker2里面执行如下命令,也就是刚刚叫你保存的那部分

微信图片_20231227123613

微信图片_20231227123622

然后再在 master 结点 执行

kubectl get nodes

微信图片_20231227124159

可见结点添加成功

使用dashboard可视化管理k8s

这里需要去master结点配置

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

如果直接用master结点执行上面的命令报错,可以自己想办法打开这个github的网站,然后把里面的内容全部复制,通过vim 手动写入 dashboard.yaml文件

然后运行

kubectl apply -f dashboard.yaml

来应用配置

1704275970_6595300256706d14cce3e.png!small

微信图片_20231227124500

设置访问端口

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

将里面的type: ClusterIP 改为 type: NodePort

微信图片_20231227124616

获取访问端口

kubectl get svc -A |grep kubernetes-dashboard

微信图片_20231227124633

这里我们需要记住的是 kubernetes-dashboard的访问端口,也就是 31753这个端口

创建访问账户

vim dash.yaml

将以下内容写入dash.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

应用dash.yaml

kubectl apply -f dash.yaml


微信图片_20231227124715

微信图片_20231227124729

然后执行以下命令

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

来获取访问这个网站的token,token是从 ey开始到root之前结束

微信图片_20231227124745

微信图片_20231227124814

有时候可能会dashboard一直处于容器创建模式,可能是网络问题,可以通过重启master结点或者worker结点,多重启几次

微信图片_20231227130204

成功之后就通过自带的火狐访问

https://master-ip:port
注意一定要是https

如果说证书有问题,直接点击高级,无视风险访问

在token处输入刚刚叫你保存的token

配置完成

参考:https://zhuanlan.zhihu.com/p/654320979

# 云安全 # 云原生安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录