Kubeadm 是社區官方持續維護的集羣搭建工具,在 Kubernertes v1.13 版本的時候就已經 GA 了(GA 即 General Availability,指官方開始推薦普遍使用),它跟着 Kubernetes 的版本一塊兒發佈,目前 Kubeadm 代碼放在 Kubernetes 的主代碼庫中。node
Kubeadm 在設計之初的定位就是隻關心集羣的 bootstrapping,並不負責物理資源的管理和申請。在集羣 bootstrapping 搭建完成後,你能夠根據本身的須要,在集羣中部署本身的 add-on 組件,好比 CNI 插件、Dashboard 等。linux
採用一臺master節點和一臺node節點作部署git
[root@master ~]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) [root@master ~]# uname -r 3.10.0-1127.19.1.el7.x86_64 [root@master ~]# hostname master [root@master ~]# getenforce Disabled [root@master ~]# docker -v Docker version 19.03.13, build 4484c46d9d [root@master ~]# firewall-cmd --state not running
[root@node ~]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) [root@node ~]# uname -r 3.10.0-1127.19.1.el7.x86_64 [root@node ~]# hostname node [root@node ~]# getenforce Disabled [root@node ~]# docker -v Docker version 19.03.13, build 4484c46d9d [root@node ~]# firewall-cmd --state not running
[root@master ~]# cat <<EOF > /etc/sysctl.d/k8s.conf > net.bridge.bridge-nf-call-ip6tables = 1 > net.bridge.bridge-nf-call-iptables = 1 > EOF [root@master ~]# sysctl --system
[root@master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo > [kubernetes] > name=Kubernetes > baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 > enabled=1 > gpgcheck=1 > repo_gpgcheck=1 > gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg > EOF [root@master ~]# yum makecache Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.6 kB 00:00:00 docker-ce-stable | 3.5 kB 00:00:00 extras | 2.9 kB 00:00:00 kubernetes/signature | 454 B 00:00:00 Retrieving key from https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg Importing GPG key 0xA7317B0F: Userid : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>" Fingerprint: d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f From : https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg Is this ok [y/N]: y kubernetes/signature | 1.4 kB 00:00:06 !!! updates | 2.9 kB 00:00:00 (1/11): extras/7/x86_64/filelists_db | 217 kB 00:00:00 (2/11): extras/7/x86_64/other_db | 124 kB 00:00:00 (3/11): base/7/x86_64/other_db | 2.6 MB 00:00:00 (4/11): kubernetes/primary | 78 kB 00:00:00 (5/11): base/7/x86_64/filelists_db | 7.1 MB 00:00:01 (6/11): kubernetes/other | 51 kB 00:00:00 (7/11): kubernetes/filelists | 26 kB 00:00:01 (8/11): updates/7/x86_64/filelists_db | 2.4 MB 00:00:00 (9/11): updates/7/x86_64/other_db | 318 kB 00:00:00 (10/11): docker-ce-stable/x86_64/filelists_db | 21 kB 00:00:02 (11/11): docker-ce-stable/x86_64/other_db | 114 kB 00:00:02 kubernetes 570/570 kubernetes 570/570 kubernetes 570/570 Metadata Cache Created
[root@node ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo > [kubernetes] > name=Kubernetes > baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 > enabled=1 > gpgcheck=1 > repo_gpgcheck=1 > gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg > EOF [root@node ~]# yum makecache Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.6 kB 00:00:00 docker-ce-stable | 3.5 kB 00:00:00 extras | 2.9 kB 00:00:00 kubernetes/signature | 454 B 00:00:00 Retrieving key from https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg Importing GPG key 0xA7317B0F: Userid : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>" Fingerprint: d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f From : https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg Is this ok [y/N]: y kubernetes/signature | 1.4 kB 00:00:10 !!! updates | 2.9 kB 00:00:00 (1/11): base/7/x86_64/other_db | 2.6 MB 00:00:00 (2/11): extras/7/x86_64/filelists_db | 217 kB 00:00:00 (3/11): extras/7/x86_64/other_db | 124 kB 00:00:00 (4/11): docker-ce-stable/x86_64/filelists_db | 21 kB 00:00:00 (5/11): kubernetes/filelists | 26 kB 00:00:00 (6/11): kubernetes/other | 51 kB 00:00:00 (7/11): docker-ce-stable/x86_64/other_db | 114 kB 00:00:00 (8/11): updates/7/x86_64/other_db | 318 kB 00:00:00 (9/11): kubernetes/primary | 78 kB 00:00:00 (10/11): base/7/x86_64/filelists_db | 7.1 MB 00:00:01 (11/11): updates/7/x86_64/filelists_db | 2.4 MB 00:00:00 kubernetes 570/570 kubernetes 570/570 kubernetes 570/570 Metadata Cache Created
kubeadm:用來初始化集羣的指令。github
kubelet:在集羣中的每一個節點上用來啓動 pod 和容器等。docker
kubectl:用來與集羣通訊的命令行工具。bootstrap
[root@master ~]# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes [root@master ~]# systemctl enable kubelet Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swapapi
- --image-repository #因爲kubeadm默認是從官網k8s.grc.io下載所需鏡像,國內沒法訪問,因此這裏經過--image-repository指定爲阿里雲鏡像倉庫地址
- --pod-network-cidr #指定pod網絡段
- --service-cidr #指定service網絡段
- --ignore-preflight-errors=Swap #忽略swap報錯信息
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.147.129:6443 --token fr99wu.9b51dl4k0yg5u3by \ --discovery-token-ca-cert-hash sha256:c4293c31d3e30d6171290407e6af503dd75633fe0cb0e1668d8f9c0c6a611bbb
[root@master ~]# mkdir -p $HOME/.kube [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@node .kube]# kubeadm join 192.168.147.129:6443 --token fr99wu.9b51dl4k0yg5u3by \ > --discovery-token-ca-cert-hash sha256:c4293c31d3e30d6171290407e6af503dd75633fe0cb0e1668d8f9c0c6a611bbb
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml [root@master ~]# kubectl apply -f kube-flannel.yml
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 10m v1.19.2 node Ready <none> 2m6s v1.19.2 [root@master ~]# kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-6d56c8448f-9crzw 1/1 Running 0 9m55s kube-system coredns-6d56c8448f-qrmkr 1/1 Running 0 9m55s kube-system etcd-master 1/1 Running 0 10m kube-system kube-apiserver-master 1/1 Running 0 10m kube-system kube-controller-manager-master 1/1 Running 0 10m kube-system kube-flannel-ds-6f4tl 1/1 Running 0 57s kube-system kube-flannel-ds-s8nw5 1/1 Running 0 57s kube-system kube-proxy-dj9q4 1/1 Running 0 2m15s kube-system kube-proxy-mrf9v 1/1 Running 0 9m55s kube-system kube-scheduler-master 1/1 Running 0 10m