搭建kubernetes(k8s)环境前提

我用的是操作系统是centos7.6,搭建k8s环境需要修改一些基本系统配置

# 关闭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-iptables = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
""" > /etc/sysctl.conf
modprobe br_netfilter
sysctl -p

# 同步时间
yum install -y ntpdate
ntpdate -u ntp.api.bz

# 安装内核组件 
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm 
yum -y --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml

# 启用最新的内核 
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 
grub2-set-default 0 
grub2-mkconfig -o /boot/grub2/grub.cfg 
reboot 
uname -a

# 确认内核版本后,开启IPVS
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in \${ipvs_modules}; do
 /sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
 if [ $? -eq 0 ]; then
 /sbin/modprobe \${kernel_module}
 fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

安装配置Docker

Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信,因此docker安装完成后,还需要手动修改iptables规则。

1. 主机名配置和hosts配置

# 主机名配置(因为K8S的规定,主机名只支持包含 `-` 和 `.`(中横线和点)两种特殊符号,并且主机名不能出现重复)
hostnamectl set-hostname ip-192-168-217-130
#编辑hosts
192.168.217.130 ip-192-168-217-130

2. 时间、时区、系统语言

  • 查看时区

    date -R或者timedatectl

  • 修改时区

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

  • 修改系统语言环境

    sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile;source /etc/profile

3. Docker CE安装与配置(国内阿里云源)

建议CentOS用户使用非root用户来运行docker,比如我创建并切换yinjj用户进行docker ce安装

# 添加用户(可选)
sudo adduser yinjj
# 为新用户设置密码
sudo passwd yinjj
# 为新用户添加sudo权限
sudo echo 'yinjj ALL=(ALL) ALL' >> /etc/sudoers
# 卸载旧版本Docker软件
sudo yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-selinux \
              docker-engine-selinux \
              docker-engine \
              container*
# 定义安装版本
export docker_version=18.06.3
# step 1: 安装必要的一些系统工具
sudo yum remove docker docker-client docker-client-latest \
    docker-common docker-latest docker-latest-logrotate \
    docker-logrotate docker-engine -y;
sudo yum update -y;
sudo yum install -y yum-utils device-mapper-persistent-data \
    lvm2 bash-completion;
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;
# Step 3: 更新并安装 Docker-CE
sudo yum makecache all;
version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk '{print $2}');
sudo yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version};
# 如果已经安装高版本Docker,可进行降级安装(可选)
yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version};
# 把当前用户加入docker组
sudo usermod -aG docker yinjj;
# 编辑systemctl的Docker启动文件和配置文件
sudo sed -i "13i ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT" /usr/lib/systemd/system/docker.service
sudo mkdir -p /etc/docker
sudo touch /etc/docker/daemon.json
sudo cat > /etc/docker/daemon.json <<EOF
{
	"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/"],
	"exec-opts": ["native.cgroupdriver=systemd"],
  	"log-driver": "json-file",
  	"log-opts": {
 		"max-size": "100m"
  	},
    	"storage-driver": "overlay2"
}
EOF
# 启动docker
sudo systemctl daemon-reload 
sudo systemctl enable docker 
sudo systemctl start docker

安装kubernetes(k8s)

安装k8s集群的方法多达几十种,因为我们已经配置好了系统的基础环境和docker环境,这里博主先介绍一种办法,如果以后有时间还会在这里更新

1. 通过Minikube 安装 Kubernetes本地实验环境

1.先检测你的系统或者虚拟机是否开启嵌套虚拟化
#1.检查cup是否支持虚拟化
$ egrep "(svm|vmx)" /proc/cpuinfo
$ #返回文本中有vmx或者svm,则支持虚拟化。
   
#2.检查是否加载KVM模块
$ lsmod | grep kvm
kvm_intel 172032 0
kvm 544768 1 kvm_intel
irqbypass 16384 1 kvm
#有上面信息输出  则成功
   
#3.  检查是否打开了嵌套虚拟机功能
$ cat /sys/module/kvm_intel/parameters/nested
N
#如果显示结果不是 Y 的话需要开启 nested:

$ vi /etc/modprobe.d/kvm-nested.conf
options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1

$ modprobe -r kvm_intel

$ modprobe -a kvm_intel

$ cat /sys/module/kvm_intel/parameters/nested
Y
#再次检查输出为Y则已开启嵌套虚拟机功能

2.安装 Kubernetes本地实验环境
#由于墙的问题,可以下载阿里云的minikube
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.0.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
#推荐使用kvm2驱动
$ sudo yum install libvirt-daemon-kvm qemu-kvm
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 \
&& sudo install docker-machine-driver-kvm2 /usr/local/bin/
#启动libvirtd
$ sudo systemctl enable libvirtd.service
$ sudo systemctl start libvirtd.service
$ sudo systemctl status libvirtd.service
#将您的用户添加到`libvirt`组(较旧的发行版可能会使用`libvirtd`)
$ sudo usermod -a -G libvirt $(whoami)
$ newgrp libvirt
#直接使用minikube安装k8s环境了
$ minikube start
#如果minikube start报错以下错误
error: failed to get network 'default'
error: 未找到网络: 没有网络与名称 'default' 映射

执行命令
$ sudo yum install libvirt-daemon-config-network

KubeVirt环境安装

$ minikube config -p kubevirt set memory 4096
$ minikube config -p kubevirt set vm-driver kvm2
$ minikube start -p kubevirt
#安装KubeVirt
$ export KUBEVIRT_VERSION="v0.15.0"
$ kubectl create -f  https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
$ kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
#查看kubevirt是否都启动了
$ kubectl get pods -n kubevirt
NAME                               READY     STATUS    RESTARTS   AGE
virt-api-649859444c-fmrb7          1/1       Running   0          2m12s
virt-api-649859444c-qrtb6          1/1       Running   0          2m12s
virt-controller-7f49b8f77c-kpfxw   1/1       Running   0          2m12s
virt-controller-7f49b8f77c-m2h7d   1/1       Running   0          2m12s
virt-handler-t4fgb                 1/1       Running   0          2m12s
virt-operator-6c5db798d4-9qg56     1/1       Running   0          6m41s
#下载 virtctl
$ curl -L -o virtctl \
https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64
$ chmod +x virtctl
#部署vm
$ kubectl apply -f https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml
#查看vms资源列表
$ kubectl get vms
# 启动vm
$ ./virtctl start testvm
#命令行模式进入刚刚创建的vm
$ ./virtctl console testvm
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐