部署单节点 Kubernetes(K8s)集群通常用于开发环境或测试环境,而不是生产环境,因为在单节点上运行的集群无法提供高可用性保证。以下是一个简化的步骤来在一台机器上部署单节点 Kubernetes 集群:

使用 Minikube 部署单节点 K8s

Minikube 是一个工具,它使得在本地机器(比如笔记本电脑)上搭建单节点的 Kubernetes 集群变得简单易行。

# 安装 Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64   # 请替换为对应操作系统的下载链接
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动 Minikube 单节点集群
minikube start --driver=<驱动名称>     # 根据主机环境选择合适的虚拟化驱动,如 'virtualbox'、'docker' 或 'kvm2'

# 确保集群已启动并准备就绪
minikube status

# 在集群中部署应用
kubectl create deployment my-app --image=my-app:latest

# 查看集群中的 Pod 和服务
kubectl get pods,svc

安装单节点 Kubernetes(Kubernetes 1.24 及更高版本)使用 kubeadm 的基本步骤如下:

环境准备

  1. 确保操作系统兼容:确认您的 CentOS 7 或其他 Linux 发行版支持 kubernetes。

  2. 更新系统并安装依赖

    sudo yum update -y
    sudo swapoff -a # 关闭交换分区,因为 Kubernetes 要求关闭
    sudo sed -i '/ swap / s/^/#/' /etc/fstab # 防止重启后自动启用交换分区
    
    # 安装 Docker 和 kubeadm、kubectl、kubelet
    sudo yum install -y containerd.io
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    
    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

设置 cgroup driver 与 Docker 一致(如果不同需要统一)

sudo systemctl restart docker
sudo grep -q 'cgroup-driver=systemd' /etc/docker/daemon.json || echo '{"exec-opts": ["native.cgroupdriver=systemd"]}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker

3. **设置 SELinux 支持**(CentOS 7 可能需要):
```bash
setenforce 0 # 临时禁用 SELinux,生产环境请不要这样做或配置适当的策略
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

初始化 Kubernetes 单节点集群

  1. 允许防火墙通过 Kubernetes 所需端口

    sudo firewall-cmd --permanent --add-port=6443/tcp
    sudo firewall-cmd --permanent --add-port=10250/tcp
    sudo firewall-cmd --permanent --add-port=2379-2380/tcp
    sudo firewall-cmd --permanent --add-port=10251-10252/tcp
    sudo firewall-cmd --permanent --add-port=10255/tcp
    sudo firewall-cmd --reload
  2. 初始化集群

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket=/var/run/containerd/containerd.sock

    这里指定 Pod 网络的 CIDR 范围,并指定了容器运行时接口为 containerd。如果使用的是 Docker,则不指定 --cri-socket 参数。

    初始化完成后会输出一些命令,用于将当前用户加入到 kubeconfig 中以执行 kubectl 命令。

  3. 配置 kubectl 访问控制平面

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

配置网络插件

  1. 安装 Pod 网络插件,例如 Calico 或 Flannel:

    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    # 或者使用 flannel
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  2. 等待网络插件部署完成

    kubectl get pods -n kube-system -w

标记控制节点为工作节点

对于单节点集群,需要标记控制节点也作为工作节点:

  1. 标记节点为工作节点
    kubectl taint nodes --all node-role.kubernetes.io/master-

至此,您已成功在单节点上安装了 Kubernetes 并配置了基本的网络。您可以使用 kubectl 来创建和管理资源。不过,请注意这只是一个基础的安装流程,在实际生产环境中,还需要进一步优化和安全配置。

检查状态和部署应用

kubectl get nodes
kubectl create deployment ...

请注意,以上命令仅为示例,并且可能需要根据具体版本和环境进行调整。在实际操作中,请参考官方文档以获取最新的安装指南。此外,在生产环境中强烈建议部署多节点集群以实现冗余和高可用性。

# 问题
1. 在执行minikube start --driver=docker 时报错,不允许root执行。 
  可以使用强制执行,或者切换用户执行minikube start --driver=docker --force
  也可以切换非root用户,但是需要赋权限 不如说给myuser赋权限 ,加进docker组
```bash
sudo usermod -aG docker myuser
newgrp docker      # 切换到新组以使更改生效
  1. 在执行kubectl 没有这个命令
    在 CentOS 7 上安装 kubectl,可以按照以下步骤操作:

  2. 更新系统

    sudo yum update -y
  3. 安装必要依赖(如果尚未安装):

    sudo yum install -y yum-utils curl
  4. 下载最新稳定版的 kubectl
    使用curl从Kubernetes官方仓库下载适用于Linux amd64架构的kubectl二进制文件,并赋予权限。

    # 获取最新稳定版kubect版本号
    KUBECTL_VERSION=$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)
    
    # 下载kubectl到当前目录
    curl -Lo kubectl "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl"
    
    # 给kubectl添加可执行权限
    chmod +x ./kubectl
  5. 将kubectl移动到系统路径下
    这样可以从任何地方直接调用kubectl命令,通常我们会将其移动到 /usr/local/bin 目录。

    sudo mv ./kubectl /usr/local/bin/kubectl
  6. 验证kubectl安装成功
    确认kubectl已经正确安装并配置好,可以通过查看其版本信息来验证。

    kubectl version --client

现在,您应该可以在您的CentOS 7系统上使用kubectl与Kubernetes集群进行交互了。如果需要连接到特定的集群,请确保已设置正确的kubeconfig文件或环境变量指向集群配置。

从提供的信息来看,你的 Minikube 环境是运行正常的,控制面板(Control Plane)的各个组件如 host、kubelet、apiserver 都处于 Running 状态,并且 kubeconfig 文件也已经配置好。

然而,你尝试执行 kubectl 命令时提示找不到该命令,这意味着虽然 Minikube 已经启动并运行了一个 Kubernetes 集群,但你的主机系统中还没有正确安装或配置 kubectl 客户端工具。

要在 CentOS 7 上安装 kubectl,可以按照以下步骤操作:

# 添加 Kubernetes 的稳定版仓库
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/apt/doc/apt-key.gpg
EOF

# 更新包列表并安装 kubectl
sudo yum update
sudo yum install -y kubectl

# 验证 kubectl 是否安装成功
kubectl version --client

如果已安装但在 PATH 路径中未找到 kubectl,请确保 /usr/local/bin 或其他 kubectl 所在目录已经被添加到了系统的 PATH 环境变量中。你可以通过 echo $PATH 查看当前的 PATH 设置。

另外,Minikube 提供了一个方便的功能,可以直接获取与当前 Minikube 配置相匹配的 kubectl 版本,你可以使用如下命令:

minikube kubectl -- get pods

或者,如果你希望将 Minikube 自带的 kubectl 映射到全局可执行路径:

minikube kubectl config set-cluster minikube --embed-certs=true --server=https://$(minikube ip):8443
minikube kubectl config use-context minikube
ln -s $(which minikube-kubectl) /usr/local/bin/kubectl

完成以上操作后,你应该能在终端中直接使用 kubectl 命令来管理你的 Kubernetes 集群了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐