您的位置:首页 > 运维架构 > Kubernetes

Kubernetes基于kubeadm的安装

2019-04-02 10:48 495 查看

安装环境准备

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

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: