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。
- 安装 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