Kubernetes在2014年開源後,很快便佔據了容器編排的主導地位,成爲容器編排的事實標準。那麼Kubernetes的安裝是瞭解它的第一步。目前有非常多的工具方法來實現Kubernetes的安裝,收集了一些如下。
- kubeadm:https://github.com/kubernetes/kubeadm
kubeadm是官方提供的最爲通用的一種部署方案。 - kops:https://github.com/kubernetes/kops
kops通過命令行創建,銷燬,升級和維護生產級,高可用性的Kubernetes集羣。目前正式支持AWS(Amazon Web Services),其中GCE和OpenStack處於beta測試階段,而VMware vSphere處於alpha階段。 - kubespray:https://github.com/kubernetes-sigs/kubespray
kubespray通過 Ansible Playbook 來定義系統與 Kubernetes 集羣部署的任務。 - KubeOperator: https://github.com/KubeOperator/KubeOperator
KubeOperator 是一個Fit2Cloud開源項目,在離線網絡環境下,通過可視化 Web UI 在 VMware、Openstack 或者物理機上規劃、部署和運營生產級別的 Kubernetes 集羣。 - ansible-install-k8s:https://github.com/lizhenliang/ansible-install-k8s
ansible-install-k8s支持離線安裝,是屬於個人開發的ansible部署腳本
使用kubeadm部署單機版k8s
Master節點安裝
- 機器準備
- 虛機配置2核4G以上
- 可訪問外網
- 操作系統CentOS 7.6
- 準備工作
$ systemctl stop firewalld
$ systemctl disable firewalld
$ setenforce 0
$cat /etc/selinux/config
...
SELINUX=disabled
...
$ hostnamectl set-hostname master1
- 添加k8s yum源
[k8s]
name=k8s
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
- 確保 iptables 工具不使用 nftables 後端
$ update-alternatives --set iptables /usr/sbin/iptables-legacy
- 安裝軟件
$ yum install -y docker kubelet kubeadm kubectl kubernetes-cni
$ echo "KUBELET_EXTRA_ARGS=--cgroup-driver=systemd" > /etc/sysconfig/kubelet
- 關閉系統的Swap
$ swapoff -a
$ # 將/etc/fstab文件中的Swap註釋掉
$ cat /etc/fstab
/dev/mapper/VolGroup00-LogVol00 / xfs defaults 0 0
UUID=1539acb0-0589-4eae-a0a4-24566186e425 /boot xfs defaults 0 0
#/dev/mapper/VolGroup00-LogVol01 swap swap defaults 0 0
- 創建/etc/sysctl.d/k8s.conf文件,添加如下內容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
- 啓動docker與配置kubelet服務
systemctl start docker
systemctl enable docker
systemctl enable kubelet
- 對docker進行加速,在/etc/sysconfig/docker配置項中添加如下內容
--registry-mirror=https://r03u9tep.mirror.aliyuncs.com
- 使用hub.docker.com中的鏡像,例如:
docker.io/aiotceo/kube-apiserver
$ # 下載aiotceo鏡像
$ kubeadm config images list | sed -e 's/^/docker pull /g' -e 's/k8s.gcr.io/docker.io\/aiotceo/g' -e 's/-0//g' | sh -x
$ #將aiotceo重新tag到k8s.gcr.io
$ docker images | grep aiotceo | awk '{print "docker tag " $1":"$2,$1":"$2}' | sed -e "s#docker.io/aiotceo#k8s.gcr.io#2" -e "s#3.4.3#3.4.3-0#2" | sh -x
$ #刪除aiotceo鏡像
$ docker images |grep aiotceo |awk '{print "docker rmi ", $1":"$2}' |sh -x
- 初始化kube集羣
$ kubeadm init
...
kubeadm join 10.0.2.15:6443 --token 8o8yv2.tv836s1jncmrwgsp \
--discovery-token-ca-cert-hash sha256:d9d15b5905e8defc0ef6de294be5eff08d720ed9d98b8d6cb99d153bc7332e8e
- 創建管理員訪問文件
$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- 安裝網絡插件,例如calico
$ kubectl apply -f https://kuboard.cn/install-script/calico/calico-3.13.1.yaml
- 查看k8s狀態
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node1 Ready master 14m v1.18.2
添加計算節點
重複 0-9 步,完成環境準備,安裝軟件及下載鏡像。
- kubeadm將計算節點加入集羣
kubeadm join 10.0.2.15:6443 --token 8o8yv2.tv836s1jncmrwgsp \
--discovery-token-ca-cert-hash sha256:d9d15b5905e8defc0ef6de294be5eff08d720ed9d98b8d6cb99d153bc7332e8e
- 查看k8s狀態
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node1 Ready master 14m v1.18.2
node2 Ready <none> 30m v1.18.2
補充說明:
- 安裝時可以通過
kubeadm config print init-defaults
查看默認配置
$ kubeadm config print init-defaults
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 1.2.3.4
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: master1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
scheduler: {}
- 使用
kubeadm init --config
可以指定kubeadm配置文件