Kubernetes在2014年开源后,很快便占据了容器编排的主导地位,成为容器编排的事实标准。那么Kubernetes的安装是了解它的第一步。目前有非常多的工具方法来实现Kubernetes的安装,收集了一些如下。
使用kubeadm部署单机版k8s Master节点安装
机器准备
虚机配置2核4G以上
可访问外网
操作系统CentOS 7.6
准备工作
1 2 3 4 5 6 7 8 $ systemctl stop firewalld $ systemctl disable firewalld $ setenforce 0 $cat /etc/selinux/config ... SELINUX=disabled ... $ hostnamectl set-hostname master1
添加k8s yum源
1 2 3 4 [k8s] name=k8s baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck=0
确保 iptables 工具不使用 nftables 后端
1 $ update-alternatives --set iptables /usr/sbin/iptables-legacy
安装软件
1 2 $ yum install -y docker kubelet kubeadm kubectl kubernetes-cni $ echo "KUBELET_EXTRA_ARGS=--cgroup-driver=systemd" > /etc/sysconfig/kubelet
关闭系统的Swap
1 2 3 4 5 6 $ 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文件,添加如下内容
1 2 3 4 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness=0
启动docker与配置kubelet服务
1 2 3 systemctl start docker systemctl enable docker systemctl enable kubelet
对docker进行加速,在/etc/sysconfig/docker配置项中添加如下内容
1 --registry-mirror=https://r03u9tep.mirror.aliyuncs.com
使用hub.docker.com中的镜像,例如:docker.io/aiotceo/kube-apiserver
1 2 3 4 5 6 $ # 下载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集群
1 2 3 4 $ kubeadm init ... kubeadm join 10.0.2.15:6443 --token 8o8yv2.tv836s1jncmrwgsp \ --discovery-token-ca-cert-hash sha256:d9d15b5905e8defc0ef6de294be5eff08d720ed9d98b8d6cb99d153bc7332e8e
创建管理员访问文件
1 2 $ mkdir -p $HOME/.kube $ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
安装网络插件,例如calico
1 $ kubectl apply -f https://kuboard.cn/install-script/calico/calico-3.13.1.yaml
查看k8s状态
1 2 3 $ kubectl get node NAME STATUS ROLES AGE VERSION node1 Ready master 14m v1.18.2
添加计算节点 重复 0-9 步,完成环境准备,安装软件及下载镜像。 10. kubeadm将计算节点加入集群
1 2 kubeadm join 10.0.2.15:6443 --token 8o8yv2.tv836s1jncmrwgsp \ --discovery-token-ca-cert-hash sha256:d9d15b5905e8defc0ef6de294be5eff08d720ed9d98b8d6cb99d153bc7332e8e
查看k8s状态
1 2 3 4 $ 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查看默认配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 $ 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配置文件
参考文章 使用kubeadm安装kubernetes_v1.18.x 利用 kubeadm 创建高可用集群