Kubernetes安装手册
2020-05-06 本文已影响0人
潘晓华Michael
Kuberntes安装
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配置文件