Kubernetes集群搭建步骤
1:准备物理或虚拟机器
为Kubernetes集群准备物理或虚拟机器。至少需要一个控制节点(Master Node)和一个工作节点(Worker Node),建议使用Linux操作系统。
2: 安装Docker
Kubernetes需要依赖Docker容器,因此需要在每台机器上安装Docker。可以使用以下命令在centos7.x上安装Docker:
# 安装 Docker
$ sudo yum install -y docker
# 启动 Docker 服务
$ sudo systemctl enable docker && sudo systemctl start docker
添加Kubernetes存储库
您需要添加Kubernetes存储库以获取特定版本的Kubernetes软件包。您可以使用以下命令添加存储库:
sudo tee /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
国内镜像替换:
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装 kubeadm、kubelet、kubectl 指定版本,否则是最新版本,不支持docker容器
使用以下命令安装Kubernetes:
sudo yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0 --disableexcludes=kubernetes
请注意,此处的版本号应替换为您想要安装的特定版本。还要注意,在使用kubelet和kubeadm时,版本必须匹配。
开机启动kubelet
systemctl enable kubelet
systemctl start kubelet
systemctl daemon-reload
systemctl restart kubelet
初始化Kubernetes主节点,使用以下命令初始化Kubernetes主节点:
sudo kubeadm init --kubernetes-version=1.20.0
替换使用:
kubeadm init --apiserver-advertise-address=192.168.36.138 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
请注意,此处的版本号应替换为您想要安装的特定版本。
加入节点
按照初始化完成后的输出,使用相应的命令将节点加入集群。
安装网络插件
使用以下命令安装网络插件:
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
插件配置可以参考官网: https://kubernetes.io/docs/concepts/cluster-administration/addons/
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calicoctl.yaml
验证集群
使用以下命令验证Kubernetes集群是否正常运行
kubectl get nodes
如果所有节点都处于Ready状态,则表示Kubernetes集群已经安装成功。
这些是安装特定版本的Kubernetes集群的基本步骤。请注意,在使用Kubernetes时,您需要了解它的基本概念和操作。
集群初始化
在k8s-master机器上执行如下命令:
#配置使用 kubectl 命令工具(类似docker这个命令),执行上图里的命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
其他节点加入集群,执行:
kubeadm join 192.168.36.130:6443 --token p7h3it.1yrrjwffgnu1hme5 \
--discovery-token-ca-cert-hash sha256:80cf5b31503d76bab01a9fd20f14d2f31ea6325695c7313613e078a999991e1b
#查看kubectl是否能正常使用
kubectl get nodes
kubectl get pods -n kube-system -owide
卸载k8s集群
通过yum安装的Kubernetes集群,您可以按照以下步骤操作:
删除安装包
sudo systemctl stop kubelet
sudo yum remove kubeadm-1.20.0 kubelet-1.20.0 kubectl-1.20.0
删除Kubernetes相关的配置文件和目录:
sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/kubernetes/
删除kubelet,kubectl和kubeadm命令行工具:
sudo rm -rf /usr/bin/kube*
如果您使用了Docker作为容器运行时,请确保删除Docker中相关的Kubernetes容器:
sudo docker ps -a | grep k8s | awk '{print $1}' | xargs sudo docker rm -f
这将列出所有包含"k8s"的Docker容器并强制删除它们。
如果你使用Kubeadm安装的Kubernetes集群,则可以按照以下步骤卸载:
删除Kubernetes节点
在每个节点上执行以下命令:
kubeadm reset
这个命令将清理节点上安装的所有Kubernetes组件和配置文件。
删除Kubernetes Master
在Kubernetes Master节点上执行以下命令:
kubeadm reset
这个命令将清理Master节点上安装的所有Kubernetes组件和配置文件。
删除etcd数据
如果你使用了etcd作为Kubernetes集群的数据存储,可以在etcd节点上执行以下命令删除数据:
etcdctl del "" --prefix
删除Kubernetes二进制文件和配置文件
删除在安装Kubernetes时创建的所有文件和目录,例如:
rm -rf /etc/kubernetes/
rm -rf /var/lib/etcd/
rm -rf /var/lib/kubelet/
rm -rf /var/lib/kube-proxy/
rm -rf /var/lib/kubernetes/
rm -rf /usr/local/bin/kubectl
rm -rf /usr/local/bin/kubelet
rm -rf /usr/local/bin/kubeadm
这些步骤应该足以卸载你的Kubernetes集群。
安装遇到的问题
centos安装k8s提示 error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time=“2023-05-02T13:55:19+08:00” level=fatal msg=“getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService”
这个错误提示表明 Kubernetes 安装器在执行预检查时无法检测到运行时(container runtime),通常是因为 Docker 服务未启动导致的。您可以按照以下步骤检查和解决这个问题:
确认 Docker 服务已经启动:
$ sudo systemctl status docker
如果 Docker 服务未启动,可以通过以下命令启动 Docker:
$ sudo systemctl start docker
确认 Docker 服务已经设置为开机自启:
$ sudo systemctl is-enabled docker
如果输出为 disabled,可以通过以下命令设置 Docker 开机自启:
$ sudo systemctl enable docker
重新运行 Kubernetes 安装器:
确认 Docker 服务已经启动之后,重新运行 Kubernetes 安装器。如果仍然遇到问题,可以考虑检查 Docker 的日志以获取更多信息:
$ sudo journalctl -u docker
检查日志以查看是否存在其他错误或警告信息。
注意:在安装 Kubernetes 之前,请确保您的系统已经正确安装了 Docker,并且 Docker 服务已经启动并设置为开机自启。
请注意 k8s的版本与docker版本,新版本的k8s已经不在使用docker作为容器,
从 Kubernetes 1.22 版本开始,Docker 不再是 Kubernetes 推荐的容器运行时,推荐的容器运行时是containerd。但是,Kubernetes 版本 1.19 到 1.21 仍然支持 Docker。
因此,如果你想使用 Docker 作为 Kubernetes 的容器运行时,你可以安装 Kubernetes 版本 1.19、1.20 或 1.21。
但是,如果要使用推荐的容器运行时 containerd,则可以安装 Kubernetes 版本 1.22 或更高版本。
请注意,随着新版本 Kubernetes 和 Docker 的发布,这些建议将来可能会发生变化,因此检查要使用的特定版本的兼容性矩阵始终是一个好主意。
要在 Kubernetes 中使用 containerd,需要进行以下步骤:
1:安装 containerd。可以从 containerd 的官方网站下载二进制文件并进行安装。在安装过程中,需要配置 containerd 的网络参数和存储参数。例如,可以配置 containerd 使用 Unix 套接字进行通信,并将容器镜像存储在本地文件系统上。
2:在 Kubernetes 中配置 CRI(Container Runtime Interface)插件,以使用 containerd 作为容器运行时。可以在 Kubernetes 的配置文件中指定 CRI 插件的配置参数,包括容器运行时的路径、Socket 文件的路径等。
3:启动 kubelet 进程,并在 kubelet 的启动参数中指定 CRI 插件的配置。例如,可以使用以下命令启动 kubelet:
kubelet --container-runtime=remote \
--container-runtime-endpoint=unix:///run/containerd/containerd.sock \
--image-pull-progress-deadline=2m \
...
在此命令中,--container-runtime 参数指定容器运行时类型为远程,--container-runtime-endpoint 参数指定容器运行时的 Socket 文件路径。
4: 在 Kubernetes 中创建 Pod,使用 containerd 运行容器。在 Pod 的 YAML 文件中,可以指定容器镜像、容器启动参数等信息。例如:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
command: ["sleep", "3600"]
在此 YAML 文件中,指定了一个名为 my-container 的容器,使用 my-image 镜像运行,并在容器内运行 sleep 命令。
这些步骤可以帮助您将 containerd 集成到 Kubernetes 中,并使用 containerd 运行容器。