centos7搭建k8s集群
环境:
ip | 主机名 | 角色 |
---|---|---|
192.168.25.133 | k8s01 | master |
192.168.25.134 | k8s02 | slave |
192.168.25.135 | k8s03 | slave |
安装必要的软件
yum install -y net-tools.x86_64 wget yum-utils
配置hosts
cat >> /etc/hosts << EOF
192.168.25.133 k8s01
192.168.25.134 k8s02
192.168.25.135 k8s03
EOF
关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
禁用selinux,让容器可以顺利地读取主机文件系统
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
关闭swap,swap是操作系统在内存吃紧的情况申请的虚拟内存,按照Kubernetes官网的说法,Swap会对Kubernetes的性能造成影响,不推荐使用
swapoff -a #临时关闭
vi /etc/fstab #永久关闭,删除或者注释掉swap配置哪一行
临时关闭 和 永久关闭 择一执行即可
如果不禁用,则需修改 vi /etc/sysconfig/kubelet :
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
将桥接的IPv4流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
查看信息
sysctl --system
在三台机器分别执行,生成各自的ssh的公私钥对
ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ""
在三台机器分别执行配置其他两台的机器的免密访问操作
ssh-copy-id k8s01
ssh-copy-id k8s02
ssh-copy-id k8s03
下载docker.repo包至 /etc/yum.repos.d/目录
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
新建kubernetes仓库文件
cat <<EOF > /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/rpm-package-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF
重启同步系统时间(保证多台服务的时间一致)
systemctl restart chronyd
配置docker仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker,启动docker,设置开机启动
yum install docker-ce
systemctl enable docker && systemctl start docker
配置镜像加速
cat >> /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://3******.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
重新加载并重启docker
systemctl daemon-reload && systemctl restart docker
安装kubelet kubeadm kubectl,启动kubelet并设置开机自启
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
使用kubeadm version可以查看kubernetes的最新版本号是多少
在master节点上执行初始化,初始化会比较慢,耐心点等待,以下命令是直接按装最新版本的kubernetes,想安装指定版本的kubernetes需要加上参数kubernetes-version即可,例如:–kubernetes-version=“v1.17.4”
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.1.0.0/16 --apiserver-advertise-address=192.168.25.133 --image-repository registry.aliyuncs.com/google_containers
master节点初始化完成会生成一个token值,需要把这个token值保存起来,以免弄丢,slave节点加入集群是需要使用到这个token的。
在两台slave节点上执行加入k8s集群
kubeadm join 192.168.25.133:6443 --token 8000y1.xh9227rgmyfy0ljx
slave节点成功加入集群后会显示This node has joined the cluster提示信息
在master上执行kubectl get nodes会报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?
解决方法:将/etc/kubernetes/admin.conf配置进环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
重新加载环境变量
source /etc/profile
再次执行kubectl get nodes命令成功
将admin.conf复制到各个节点后再配置好环境变量也可以在node节点上执行kubectl命令查看
scp /etc/kubernetes/admin.conf root@k8s03:/etc/kubernetes/
scp /etc/kubernetes/admin.conf root@k8s02:/etc/kubernetes/
在k8s02和k8s03上分别执行
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
master节点安装网络插件,这里我选择安装flannel
官方提供的安装flannel方式,需要科学上网,下面会提供kube-flannel.ym的具体内容
kubectl apply -f https://raw