> 技术文档 > 【k8s单机版】centos安装k8s单机版

【k8s单机版】centos安装k8s单机版


这里写自定义目录标题

  • 简介
  • 一、机器环境初始化
    • 1.关闭防火墙、swap等
    • 2.内核参数修改
  • 二. 安装docker
  • 三.配置containerd
  • 四.下载阿里云的kubernetes
  • 五.k8s初始化
  • 六.部署网络插件flannel
  • 七.安装kubelet 命令补全 【可选】
  • 八.安装metrics-server 【可选】
  • 九.安装ingress 【可选】

简介

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

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

一、机器环境初始化

1.关闭防火墙、swap等

systemctl stop firewalldsetenforce 0swapoff -asystemctl disable firewalldsed -i \'/^SELINUX=/ c\\SELINUX=disabled\' /etc/selinux/configsed -i \'/swap/ s/^/#/g\' /etc/fstab#ipvs模块cat >> /etc/sysconfig/modules/k8s.modules << EOF#! /bin/bashmodprobe br_netfiltermodprobe ip_vsmodprobe ip_vs_rrmodprobe ip_vs_wrrmodprobe ip_vs_shmodprobe nf_conntrackEOF

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

2.内核参数修改

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

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

二. 安装docker

yum install -y yum-utilsyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum 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=kubernetesenabled=1baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

然后执行如下命令:

wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgrpm --import rpm-package-key.gpgyum repolistyum -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-completionsource /usr/share/bash-completion/bash_completionsource <(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.1registry.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