简介

最近为了部署xkube这个多集群k8s管理平台的演示环境,需要搭建一套k8s环境用于演示,但是由于搭建一套完整的k8s比较耗费资源成本,所以打算购买了一台阿里云的ECS搭建一个单机版的k8s用于演示。

演示地址:https://xkube.eeenet.net
git地址:https://gitee.com/eeenet/xkub

一、机器环境初始化

1.关闭防火墙、swap等

systemctl stop firewalld
setenforce 0
swapoff -a
systemctl disable firewalld
sed -i '/^SELINUX=/ c\SELINUX=disabled' /etc/selinux/config
sed -i '/swap/ s/^/#/g' /etc/fstab

#ipvs模块
cat >> /etc/sysconfig/modules/k8s.modules << EOF
#! /bin/bash
modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack
EOF

执行命令:
chmod +x /etc/sysconfig/modules/k8s.modules && cat /etc/sysconfig/modules/k8s.modules | bash

2.内核参数修改

cat >> /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.netfilter.nf_conntrack_max=1048576
vm.overcommit_memory=1
vm.swappiness=0
fs.file-max=52706963
fs.nr_open=52706963
EOF

执行命令:
sysctl -p /etc/sysctl.d/k8s.conf

二. 安装docker

yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io

修改docker的配置文件/etc/docker/daemon.json:

{
    "data-root": "/mnt/docker-image",
    "exec-opts": ["native.cgroupdriver=systemd"],
    "bip":"10.0.0.1/24",
    "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] ##此处配置自己的加速地址,可以阿里云申请
}

重启 docker:
systemctl daemon-reload && systemctl start docker && systemctl enable docker

三.配置containerd

生成配置文件:
containerd config default > /etc/containerd/config.toml
修改配置文件:
1.修改 sandbox_image 镜像配置,改为阿里镜像。
sandbox_image = " registry.aliyuncs.com/google_containers/pause:3.6"
2.注释掉 cri 插件,否则 kubelet 无法启动。
disabled_plugins = ["cri"] 更改为: disabled_plugins = [""]
3.重启containerd:systemctl restart containerd

四.下载阿里云的kubernetes

编辑repo文件:
vim /etc/yum.repos.d/kube.repo

[kubernetes]
name=kubernetes
enabled=1
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

然后执行如下命令:

wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import rpm-package-key.gpg
yum repolist
yum -y install  kubectl kubeadm kubelet

五.k8s初始化

导出配置并拉取镜像:
kubeadm config print init-defaults > init.default.yaml
拉取配置中的镜像:
kubeadm config images pull --config=init.default.yaml
查看配置中的镜像:
kubeadm config images list --config init.default.yaml
初始化前执行命令:
systemctl enable docker && systemctl start kubelet && systemctl enable kubelet
执行初始化命令:
kubeadm init --apiserver-advertise-address=172.25.30.45 --apiserver-bind-port=6443 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --kubernetes-version=1.28.2 --image-repository registry.aliyuncs.com/google_containers
注:–apiserver-advertise-address 配置机器的IP地址
–kubernetes-version 配置正确的版本
其余的可以直接用命令中的参数
如果初始化失败,执行kubeadm reset 然后根据错误调试后,继续执行初始化命令。
成功以后会看到如下图:
初始化执行结果

六.部署网络插件flannel

下载配置:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果下载不了配置中的镜像,可以先下载好镜像,推送到自己的镜像仓库,然后修改镜像到正确的地址,镜像地址如下:
image: ghcr.io/flannel-io/flannel:v0.27.2
image: ghcr.io/flannel-io/flannel-cni-plugin:v1.7.1-flannel1
镜像下载好,修改好配置以后执行命令:
kubectl apply -f kube-flannel.yml
最后一个关键配置,在 master 节点上布署服务时(启动pod),则需要修改master 节点污点配置
查看污点信息:kubectl describe node master |grep Taints
结果显示:Taints: node-role.kubernetes.io/control-plane:NoSchedule
去除污点命令: kubectl taint nodes master node-role.kubernetes.io/control-plane:NoSchedule- 最后一个"-"代表删除
备注:
NoSchedule : 一定不被调度 但是不会驱逐已有的 这个部署 ingress-controller 的时候 有用
PreferNoSchedule : 尽量不被调度
NoExecute : 不会调度,并且还会驱逐Node已有Pod 这个很坏
到此,单机版基本安装成功,可以执行命令:kubectl get node 查看状态

七.安装kubelet 命令补全 【可选】

命令如下:

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

八.安装metrics-server 【可选】

由于 xkube 的功能中需要显示k8s的节点和pod的内存和cpu资源,所以进行安装。

下载配置:https://github.com/kubernetes-sigs/metrics-server/releases

修改配置components.yaml
增加一行–kubelet-insecure-tls ,然后将镜像的地址更改成阿里云的镜像地址:
参考下图:
metrics-server配置修改
执行安装:kubectl apply -f components.yaml
验证命令:kubectl top node 或者 kubectl top pod

九.安装ingress 【可选】

由于 xkube 的功能中展示需要设计ingress相关的配置和功能所以安装

官方安装文档:https://kubernetes.github.io/ingress-nginx/deploy/#quick-start

下载配置:

https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml

修改配置,主要就是将镜像地址改成阿里云的镜像地址:

 image: registry.k8s.io/ingress-nginx/controller:v1.10.1@sha256:d1707ca76d3b044ab8a28277a2466a02100ee9f58a86af1535a3edf9323ea1b5
改成:
registry.registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.10.1

registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.1
改成
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.4.1

安装命令: kubectl apply -f deploy.yaml
验证安装:kubectl get secret,job,svc,pod,deploy -A |grep ingress

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐