Kubernetes基于kubeadm的安装
安装环境准备
1主2从总共三台虚拟机(虚拟机分配内核个数至少为二)
ip | hostname | 备注 |
192.168.66.100 |
k8s-master |
master节点 |
192.168.66.101 | k8s-node1 |
node1 |
192.168.66.102 | k8s-node2 | node2 |
操作系统如下
[code][root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
分别在各节点修改虚拟机主机名
[code][root@localhost ~]# hostname k8s-master [root@localhost ~]# hostname k8s-node1 [root@localhost ~]# hostname k8s-node2
同时配置hosts文件
vim /etc/hosts
#添加以下配置
192.168.66.100 k8s-master
192.168.66.101 k8s-node1
192.168.66.102 k8s-node2
关闭防火墙
[code]#停止当前防火墙服务 systemctl stop firewalld.service #禁用防火墙启动 systemctl disable firewalld.service #查看防火墙状态 firewall-cmd --state
关闭selinux
[code]#关闭当前selinux服务 setenforce 0 #修改selinux配置文件,防止重启后再次开启 vi /etc/selinux/config SELINUX=disabled
桥接网络配置
[code]modprobe br_netfilter vim /etc/sysctl.d/k8s.conf #新建k8s.conf文件,并添加以下内容 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 #执行修改的桥接网络设置 sysctl -p /etc/sysctl.d/k8s.conf ls /proc/sys/net/bridge #输出以下内容 bridge-nf-call-arptables bridge-nf-call-iptables bridge-nf-filter-vlan-tagged bridge-nf-call-ip6tables bridge-nf-filter-pppoe-tagged bridge-nf-pass-vlan-input-dev
关闭swap
Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。可以通过kubelet的启动参数–fail-swap-on=false更改这个限制。
[code]#关闭当前swap swapoff -a vi /etc/fstab #注释掉下面一行关于swap的配置 /dev/mapper/centos-swap swap swap defaults 0 0 #确认swap是否正确关闭 free -m swap显示为0则正确配置 #k8s的swappiness参数调整,修改配置文件 vi /etc/sysctl.d/k8s.conf #添加如下内容 vm.swappiness=0 #使修改生效 sysctl -p /etc/sysctl.d/k8s.conf
至此,安装环境的准备基本完成。为了省事,关闭防火墙、selinux、swap等操作也可直接执行以下脚本
[code]# 所有主机:基本系统配置 # 关闭Selinux/firewalld systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config # 关闭交换分区 swapoff -a yes | cp /etc/fstab /etc/fstab_bak cat /etc/fstab_bak |grep -v swap > /etc/fstab # 设置网桥包经IPTables,core文件生成路径 echo """ vm.swappiness = 0 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 """ > /etc/sysctl.conf sysctl -p # 同步时间 yum install -y ntpdate ntpdate -u ntp.api.bz
安装docker和kubernetes
下面开始安装docker和k8s,由于官方文档也并未明确指出docker和kubernetes的兼容版本要求,此次安装版本均采用最新的(docker-ce-18.09.3和kubernetes-v1.14.0),由于网络原因,安装时均配置了国内阿里yum源,安装时如果不指定版本则默认安装最新版。
docker安装
[code]#安装yum操作的基本服务,如果已安装可跳过此步骤 yum install -y net-tools epel-release yum install -y vim yum-utils device-mapper-persistent-data lvm2 #添加阿里云的docker-ce源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #查看docker可安装版本 yum list docker-ce.x86_64 --showduplicates |sort -r #安装docker如果不指定版本则会安装最新可安装版本 yum install docker-ce<-指定版本> #设置开机启动 systemctl enable docker #启动服务 systemctl start docker
kubernetes安装
[code]#添加kubernetes.repo文件并写入以下内容 vim /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 #yum命令安装 yum install kubectl<-指定版本> kubelet<-指定版本> kubernetes-cni<-指定版本> kubeadm<-指定版本> #设置开机启动 systemctl enable kubelet.service
调整启动方式
kubelet的启动环境变量要与docker的cgroup-driver驱动相同如果不一致,后续启动时报错
[code][WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".
查看docker的cgroup-driver
[code]docker info或者docker info | grep -i cgroup #找到Cgroup Driver相关内容 Cgroup Driver: cgroupfs
官方推荐处理方式(修改docker的相关配置)
[code]#Setup daemon. cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker systemctl daemon-reload systemctl restart docker
安装kubernetes相关组件
如果网络允许的话,也可直接使用kubeadm config images pull命令直接从谷歌拉取镜像到本地,前提是上网的梯子足够好。本文才去拉取国内阿里云仓库镜像的方式,省钱省力。
利用kubeadm命令查看当前kubernetes需要的镜像
[code]kubeadm config images list #显示以下内容 k8s.gcr.io/kube-apiserver:v1.14.0 k8s.gcr.io/kube-controller-manager:v1.14.0 k8s.gcr.io/kube-scheduler:v1.14.0 k8s.gcr.io/kube-proxy:v1.14.0 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.3.10 k8s.gcr.io/coredns:1.3.1
制作拉取脚本并将脚本修改为需要的tag名称,随后删除无用的镜像
[code]#!/bin/bash KUBE_VERSION=v1.14.0 KUBE_PAUSE_VERSION=3.1 ETCD_VERSION=3.3.10 DNS_VERSION=1.3.1 username=registry.cn-hangzhou.aliyuncs.com/google_containers images=( kube-proxy-amd64:${KUBE_VERSION} kube-scheduler-amd64:${KUBE_VERSION} kube-controller-manager-amd64:${KUBE_VERSION} kube-apiserver-amd64:${KUBE_VERSION} pause:${KUBE_PAUSE_VERSION} etcd-amd64:${ETCD_VERSION} coredns:${DNS_VERSION} ) for image in ${images[@]} do NEW_IMAGE=`echo ${image}|awk '{gsub(/-amd64/,"",$0);print}'` echo ${NEW_IMAGE} docker pull ${username}/${image} docker tag ${username}/${image} k8s.gcr.io/${NEW_IMAGE} docker rmi ${username}/${image} done
接下来就可以初始化master节点了(仅master节点执行)
[code]# --token-ttl 0 默认token的有效期为24小时,当过期之后,该token就不可用了,需要重新生成token,此处设置为永不过期 # --pod-network-cidr=10.244.0.0/16,选择flannel作为Pod网络插件 kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.66.100 --token-ttl 0 --ignore-preflight-errors=Swap //记录输出内容,添加节点时会用到token信息 kubeadm join 192.168.66.100:6443 --token n0kt4i.i60jw3d7veicguux \ --discovery-token-ca-cert-hash sha256:ef6c423dd699d3a0cd0620ba466573d9764f59d038377fc02e23cd71cd67034f
初始化时如果报错:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1 [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
解决办法:根据提示修改相关配置即可
[code]echo "1" >/proc/sys/net/ipv4/ip_forward echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables #修改配置后重启kubernetes服务 systemctl restart kubelet.service
为了在节点上可以使用kubectl命令,也可做以下设置
[code]mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置flannel网络(仅主节点执行)
网络原因会出现拒绝连接的情况,重试几次即可
[code]wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.yml
添加子节点(子节点上执行)
使用master节点初始化成功时输出的内容执行加入集群的动作
[code]kubeadm join 192.168.66.100:6443 --token n0kt4i.i60jw3d7veicguux \ --discovery-token-ca-cert-hash sha256:ef6c423dd699d3a0cd0620ba466573d9764f59d038377fc02e23cd71cd67034f
以上操作均成功后,及完成了kubernetes的集群安装
查看节点信息
[code]kubectl get nodes #输出如下内容 NAME STATUS ROLES AGE VERSION k8s-master Ready master 24h v1.14.0 k8s-node1 Ready <none> 23h v1.14.0 k8s-node2 Ready <none> 23h v1.14.0
- kubeadm安装Kubernetes-1.6.1集群
- 使用kubeadm安装Kubernetes 1.9
- Kubeadm安装Kubernetes环境
- 基于CentOS7.2安装Kubernetes-v1.2
- 通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]
- kubeadm安装高可用kubernetes集群
- 使用kubeadm 安装 kubernetes 1.12.0
- kubeadm安装kubernetes 1.13.2多master高可用集群
- kubeadm安装kubernetes(calico)
- 使用kubeadm安装kubernetes1.12.1
- kubernetes学习记录(2)——基于Centos7.2的kubernetes集群自动安装与配置
- kubeadm 安装 kubernetes 1.4.6
- 使用kubeadm安装kubernetes集群
- CentOS7.3利用kubeadm安装kubernetes1.7.3完整版(官方文档填坑篇)
- centos7安装指定版本docker和kubeadm安装kubernetes
- Kubernetes 和 Swarm 两种docker集群,基于ansible的自动化安装部署(已测)
- CentOS 7.6 使用kubeadm安装Kubernetes 13
- kubeadm安装kubernetes-v1.13.1
- kubeadm安装kubernetes(canal)