Master核心组件:kube-apiserver,kube-scheduler,kube-controller-manager,和etcd等
ETCD:保存每个组件的状态数据,需要高可用部署;
Node:kubelet,kube-proxy,和容器引擎(主流的为docker)等;
Docker Registry:存储镜像(制品仓库);
部署的前置条件:
1,确保每个节点上的防火墙策略和IPtables规则等处于未启用状态,即Disable;
2,集群内网的DNS提前做好解析服务;
3,集群内的所有节点通过时间服务器同步时间;
部署方式,大体上分为两种:
(1)第一种是将master上的4个核心组件和node上的3个核心组件,以节点守护进程的方式运行使用systemctl命令来管理,并enable以便开机自启动,整个流程都需要手动解决,操作起来较为复杂(需要至少5组证书),缺点是如果某一组件不可用,无法自恢复;(时间周期,一般需要1天左右时间;也可以参考GitHub上的playbook。)
(2)第二种是使用官方的集群部署管理工具kubeadm来部署,在每个节点(包含master节点和node节点)上都需要先安装Kubelet和docker,然后根据情况标记每个节点为master节点,或者node节点,其他组件均以Static Pod的形式运行(注意这些pod不受Kubernetes管理),包括:API Server, Scheduler,Controller-manager,etcd和Kube-proxy等,之后再将网络组件(如flannel)以系统守护进程(动态pod,属于daemonset类型,受Kubernetes管理)的方式启动;
具体安装步骤:
1,在每个节点上,安装kubeadm,kubelet,docker;
在master节点操作如下:
①获取Docker CE 镜像的链接:
https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.62d71b11jR49GS
② 获取Kubernetes 镜像的链接:
https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.62d71b11jR49GS
cat < /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
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
③ scp Kubernetes.repo docker.repo node01: /etc/yum.repos.d/
和scp Kubernetes.repo docker.repo node02: /etc/yum.repos.d/
scp rpm-package-key.gpg node01:/root
和scp rpm-package-key.gpg node02:/root
scp /usr/lib/systemd/docker.service node01:/usr/lib/systemd/docker.service
scp /etc/sysconfig/kubelet node01:/etc/sysconfig/kubelet
④ yum install docker-ce kubelet kubeadm kubectl
⑤ 设定启动docker
vim /usr/lib/systemd/system/docker.service
在启动docker之前,加入环境变量;
Environment=“HTTPS_PROXY=http://www.ik8s.io:10080”
Environment=“NO_PROXY=127.0.0.0/18, 172.20.0.0/16”
systemctl daemon-reload
systemctl start docker
需要确保cat /proc/sys/net/bridge/bridge-nf-call-ip6tables和cat /proc/sys/net/bridge/bridge-nf-call-ip6tables的值为1
⑥通过systemctl enable docker kubelet等设置开机自启动;
⑦vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=”–fail-swap-on=false”
kubeadm init --kuberneters-version=【Kubernetes最新稳定发行版】 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
#这一步最后,需要复制保存最后的kubeadm join命令的全部内容。
⑧mkdir -p $HOME/.kube
#如果不是管理员,则需要加sudo
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
⑨kubectl get cs或者kubectl get componentstatus
#这一步操作成功的结果是显示scheduler,controller-manager,etcd等组件状态为healthy;
⑩部署网络组件;
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#相关网址:https://github.com/flannel-io/flannel
在node01上的操作;
①rpm --import rpm-package-key.gpg
②yum install docker-ce kubelet kubeadm
③systemctl daemon-reload
systemctl start docker
④通过systemctl enable docker kubelet等设置开机自启动;
⑤使用kubeadm join命令;
相关链接:https://github.com/kubernetes/kubeadm
https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md
https://developer.aliyun.com/packageSearch?word=Kubernetes
镜像链接:
https://mirrors.aliyun.com/centos/7.9.2009/virt/x86_64/kubernetes19/kubernetes-1.9.3-1.el7.x86_64.rpm?spm=a2c6h.13651111.0.0.2bac2f70Qg1fMp&file=kubernetes-1.9.3-1.el7.x86_64.rpm
https://mirrors.aliyun.com/centos/7.9.2009/virt/x86_64/ovirt-4.2/common/cockpit-docker-193-2.el7.x86_64.rpm?spm=a2c6h.13651111.0.0.2bac2f70Qg1fMp&file=cockpit-docker-193-2.el7.x86_64.rpm