Kubernetes安装手册

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部署脚本
  • kind:https://github.com/kubernetes-sigs/kind
    Kind(Kubernetes in Docker) 是一个 Kubernetes 孵化项目,Kind 是一套开箱即用的 Kubernetes 环境搭建方案。顾名思义,就是将 Kubernetes 所需要的所有组件,全部部署在一个 Docker 容器中,可以很方便的搭建 Kubernetes 集群。
  • sealos:https://github.com/fanux/sealos
    Sealos 是一个 Go 语言开发的简单干净且轻量的 Kubernetes 集群部署工具,Sealos 能很好的支持在生产环境中部署高可用的 Kubernetes 集群。

使用kubeadm部署单机版k8s

Master节点安装

  1. 机器准备
  • 虚机配置2核4G以上
  • 可访问外网
  • 操作系统CentOS 7.6
  1. 准备工作
$ systemctl stop firewalld
$ systemctl disable firewalld
$ setenforce 0
$cat /etc/selinux/config
...
SELINUX=disabled
...
$ hostnamectl set-hostname master1
  1. 添加k8s yum源
[k8s]
name=k8s
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
  1. 确保 iptables 工具不使用 nftables 后端
$ update-alternatives --set iptables /usr/sbin/iptables-legacy
  1. 安装软件
$ yum install -y docker kubelet kubeadm kubectl kubernetes-cni
$ echo "KUBELET_EXTRA_ARGS=--cgroup-driver=systemd" > /etc/sysconfig/kubelet
  1. 关闭系统的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
  1. 创建/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
  1. 启动docker与配置kubelet服务
systemctl start docker
systemctl enable docker
systemctl enable kubelet
  1. 对docker进行加速,在/etc/sysconfig/docker配置项中添加如下内容
--registry-mirror=https://r03u9tep.mirror.aliyuncs.com
  1. 使用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 
  1. 初始化kube集群
$ kubeadm init
...
kubeadm join 10.0.2.15:6443 --token 8o8yv2.tv836s1jncmrwgsp \
    --discovery-token-ca-cert-hash sha256:d9d15b5905e8defc0ef6de294be5eff08d720ed9d98b8d6cb99d153bc7332e8e
  1. 创建管理员访问文件
$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  1. 安装网络插件,例如calico
$ kubectl apply -f https://kuboard.cn/install-script/calico/calico-3.13.1.yaml
  1. 查看k8s状态
$ kubectl get node
NAME    STATUS   ROLES    AGE   VERSION
node1   Ready    master   14m   v1.18.2

添加计算节点

重复 0-9 步,完成环境准备,安装软件及下载镜像。

  1. kubeadm将计算节点加入集群
kubeadm join 10.0.2.15:6443 --token 8o8yv2.tv836s1jncmrwgsp \
    --discovery-token-ca-cert-hash sha256:d9d15b5905e8defc0ef6de294be5eff08d720ed9d98b8d6cb99d153bc7332e8e
  1. 查看k8s状态
$ kubectl get node
NAME    STATUS   ROLES    AGE   VERSION
node1   Ready    master   14m   v1.18.2
node2   Ready    <none>   30m   v1.18.2

补充说明:

  1. 安装时可以通过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: {}
  1. 使用kubeadm init --config可以指定kubeadm配置文件

参考文章

使用kubeadm安装kubernetes_v1.18.x
利用 kubeadm 创建高可用集群

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容