安装k8s集群

简介: 1. 使用 kubeadm CentOS 7 安装 Kubernetes 准备环境在开始之前,您需要准备以下环境:一组至少包含两台物理机或虚拟机的计算机,并且它们之间可以相互通信。每台计算机都应该运行一个支持 Kubernetes 的 Linux 操作系统,如 CentOS 7。每台计算机都应该有一个静态 IP 地址,并且您需要为每台计算机选择一个主机名。每台计算机上都需要安装 Docker。

1. 使用 kubeadm  CentOS 7 安装 Kubernetes  

准备环境

在开始之前,您需要准备以下环境:


一组至少包含两台物理机或虚拟机的计算机,并且它们之间可以相互通信。


每台计算机都应该运行一个支持 Kubernetes 的 Linux 操作系统,如 CentOS 7。


每台计算机都应该有一个静态 IP 地址,并且您需要为每台计算机选择一个主机名。


每台计算机上都需要安装 Docker。

安装 Docker

使用以下命令在每台计算机上安装 Docker:

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ 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

安装完成后,您可以使用以下命令验证 Docker 是否已经成功安装:

$ sudo docker version

安装 kubeadm、kubelet 和 kubectl

在每台计算机上安装 kubeadm、kubelet 和 kubectl:

$ sudo vi /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/yum/doc/yum-key.gpg
         https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

保存并退出编辑器。然后,使用以下命令安装 kubeadm、kubelet 和 kubectl:

$ sudo yum install -y kubelet kubeadm kubectl

安装完成后,您可以使用以下命令验证 kubeadm 和 kubelet 是否已经成功安装:

$ kubeadm version
$ kubelet --version

初始化主节点

在其中一台计算机上使用 kubeadm 初始化主节点:

$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16

该命令将会自动下载必要的镜像并初始化 Kubernetes 集群。

在初始化完成后,kubeadm 将会输出一些命令,您需要记住这些命令,以便在后续步骤中使用。

部署网络插件

Kubernetes 集群需要一个网络插件才能正常工作。在这里,我们将会使用 Calico 网络插件。

在主节点上,使用以下命令部署 Calico 网络插件:

$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

添加工作节点

现在,您可以将其他计算机添加到 Kubernetes 集群中作为工作节点。

在每个工作节点上,使用 kubeadm join 命令将其加入到 Kubernetes 集群中。在第 4 步中,kubeadm init 命令输出的命令中包含了将工作节点加入到集群中所需的命令。

例如,如果 kubeadm init 命令输出的命令如下:

kubeadm join 192.168.0.1:6443 --token abcdef.0123456789abcdef \
   --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

则在工作节点上执行以下命令:

$ sudo kubeadm join 192.168.0.1:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:0123456789abcdef

上述步骤中,第 4 步初始化主节点时指定了 --pod-network-cidr 参数,用于指定 Pod 网络的 IP 地址范围。在本例中,我们使用了 192.168.0.0/16,但您可以根据您的需求选择适当的 IP 地址范围。


在第 5 步中,我们选择了 Calico 作为网络插件。您也可以选择其他网络插件,例如 Flannel、Weave Net 等。


在第 6 步中,我们使用 kubeadm join 命令将工作节点加入到 Kubernetes 集群中。在实际使用中,您需要将命令中的 IP 地址和令牌替换为主节点输出的实际值。

2. 使用 kubeadm 在Ubuntu 安装Kubernetes

使用 kubeadm 在Ubuntu 16.04、18.04 或 20.04 等基于 Debian 的 Linux 操作系统上安装 Kubernetes 集群的详细教程:

准备环境

在开始之前,您需要准备以下环境:


一组至少包含两台物理机或虚拟机的计算机,并且它们之间可以相互通信。


每台计算机都应该运行一个支持 Kubernetes 的 Linux 操作系统,如 Ubuntu 16.04、18.04 或 20.04。


每台计算机都应该有一个静态 IP 地址,并且您需要为每台计算机选择一个主机名。


每台计算机上都需要安装 Docker。

  1. 安装 Docker

使用以下命令在每台计算机上安装 Docker:

$ sudo apt-get update
$ sudo apt-get install docker.io -y

安装完成后,您可以使用以下命令验证 Docker 是否已经成功安装:

$ sudo docker version

3. 安装 kubeadm、kubelet 和 kubectl

在每台计算机上安装 kubeadm、kubelet 和 kubectl:

$ sudo apt-get update && sudo apt-get install -yapt-transport-https curl
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl

安装完成后,您可以使用以下命令验证 kubeadm 和 kubelet 是否已经成功安装:

$ kubeadm version
$ kubelet --version

4. 初始化主节点

在其中一台计算机上使用 kubeadm 初始化主节点:

$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16

该命令将会自动下载必要的镜像并初始化 Kubernetes 集群。

在初始化完成后,kubeadm 将会输出一些命令,您需要记住这些命令,以便在后续步骤中使用。

5. 部署网络插件

Kubernetes 集群需要一个网络插件才能正常工作。在这里,我们将会使用 Calico 网络插件。

在主节点上,使用以下命令部署 Calico 网络插件:

$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

6. 添加工作节点

现在,您可以将其他计算机添加到 Kubernetes 集群中作为工作节点。

在每个工作节点上,使用 kubeadm join 命令将其加入到 Kubernetes 集群中。在第 4 步中,kubeadm init 命令输出的命令中包含了将工作节点加入到集群中所需的命令。

例如,如果 kubeadm init 命令输出的命令如下:

kubeadm join 192.168.0.1:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

则在工作节点上执行以下命令:

$ sudo kubeadm join 192.168.0.1:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:0123456789abcdef补充说明一下:

上述步骤中,第 4 步初始化主节点时指定了 `--pod-network-cidr` 参数,用于指定 Pod 网络的 IP 地址范围。在本例中,我们使用了 `192.168.0.0/16`,但您可以根据您的需求选择适当的 IP 地址范围。


在第 5 步中,我们选择了 Calico 作为网络插件。您也可以选择其他网络插件,例如 Flannel、Weave Net 等。


在第 6 步中,我们使用 kubeadm join 命令将工作节点加入到 Kubernetes 集群中。在实际使用中,您需要将命令中的 IP 地址和令牌替换为主节点输出的实际值。

 

[root@localhost k8s_install_package]# kubeadm init --kubernetes-version=v1.17.3 --pod-network-cidr=10.244.0.0/16 
W0315 15:08:54.903194   97206 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0315 15:08:54.903264   97206 validation.go:28] Cannot validate kubelet config - no validator is available
[init] Using Kubernetes version: v1.17.3
[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.8.168]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-master localhost] and IPs [192.168.8.168 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-master localhost] and IPs [192.168.8.168 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
W0315 15:09:07.165562   97206 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[control-plane] Creating static Pod manifest for "kube-scheduler"
W0315 15:09:07.172549   97206 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.
[apiclient] All control plane components are healthy after 63.874249 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.17" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node k8s-master as control-plane by adding the label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marking the node k8s-master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: qx6lk0.d8pi788ch7giznhj
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.8.168:6443 --token qx6lk0.d8pi788ch7giznhj \
    --discovery-token-ca-cert-hash sha256:8b3d277ab546a7e6856933fd4150a85b96c2e81c0abdd05460517ac370a26fbb 


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
11月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
841 1
|
11月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
593 89
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
1194 9
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1351 33
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
933 19
|
人工智能 运维 Kubernetes
2025 超详细!Lens Kubernetes IDE 多平台下载安装与集群管理教程
Lens 是一款企业级 Kubernetes 可视化操作平台,2025版实现了三大技术革新:AI智能运维(异常检测准确率98.7%)、多云联邦管理(支持50+集群)和实时3D拓扑展示。本文介绍其安装环境、配置流程、核心功能及高阶技巧,帮助用户快速上手并解决常见问题。适用于 Windows、macOS 和 Ubuntu 系统,需满足最低配置要求并前置依赖组件如 kubectl 和 Helm。通过 Global Cluster Hub 实现多集群管理,AI辅助故障诊断提升运维效率,自定义监控看板和插件生态扩展提供更多功能。
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
672 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
|
运维 分布式计算 Kubernetes
ACK One多集群Service帮助大批量应用跨集群无缝迁移
ACK One多集群Service可以帮助您,在无需关注服务间的依赖,和最小化迁移风险的前提下,完成跨集群无缝迁移大批量应用。

推荐镜像

更多