Kubernetes集群搭建
目录
- 前言
- 前期准备
- K8S集群安装
- 虚拟机设置
- 安装K8S集群
- k8s部署Nginx
- 附录1 Docker安装
- 附录2 yum k8s 问题
- 附录3 k8s start问题
- 附录4 k8s master init
前言
本文指定Docker与K8s版本,保证兼容性,可供参考
- Docker‐ce‐3:19.03.9‐3.el7.x86_64
- Kubelet‐1.18.0
- Kubeadm‐1.18.0
- Kubectl‐1.18.0
前期准备
- 三台双核4GB内存,centos7+操作系统的虚拟机
- 192.168.***.133
- 192.168.***.134
- 192.168.***.135
- 三台虚拟机安装Docker (详见附录1)
K8S集群安装
虚拟机设置
三台虚拟机执行以下命令
# 1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 2.关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭(或者选择permissive宽容模式,disable在aarch64架构虚拟机开机docker无法运行)
setenforce 0 # 临时关闭
# 3.关闭 swap
swapoff -a # 临时关闭
vim /etc/fstab # 永久关闭
#注释掉swap这行
# /dev/mapper/centos‐swap swap swap defaults 0 0
systemctl reboot #重启生效
free -m #查看下swap交换区是否都为0,如果都为0则swap关闭成功
# 4.给三台机器分别设置主机名
hostnamectl set-hostname <hostname>
# 第一台:k8smaster
# 第二台:k8snode1
# 第三台:k8snode2
# 5.在k8s‐master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip
cat >> /etc/hosts << EOF
192.168.***.133 k8s-master
192.168.***.134 k8s-node1
192.168.***.135 k8s-node2
EOF
sysctl --system # 生效
# 6.将桥接的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 -p /etc/sysctl.d/k8s.conf
# 7.设置时间同步
yum install ntpdate -y
ntpdate time.windows.com
安装K8S集群
# 1、设置k8s yum源
# x86: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
# aarch64: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm‐package-key.gpg
EOF
# 2、如果之前安装过k8s,先卸载旧版本
yum remove -y kubelet kubeadm kubectl
# 3、查看可以安装的版本
yum list kubelet --showduplicates | sort -r
# 4、安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群
# 此处出现的问题:附录二
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 5、开机启动kubelet
systemctl enable kubelet
# 6、在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的ip,改成你自己机器的,后面两个ip网段不用动)
# 此处出现的问题: 附录四
kubeadm init --apiserver-advertise-address=192.168.***.133 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
# 7.启动k8s (启动失败现象,附录三)
systemctl start kubelet
# 查看启动状态
systemctl status kubelet -l
# 查看启动日志
journalctl -xefu kubelet
# 在k8s-master上配置使用 kubectl 命令工具(类似docker这个命令),
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#查看kubectl是否能正常使用
kubectl get nodes
#安装 Pod 网络插件
kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml
# 如果上面这个calico网络插件安装不成功可以试下下面这个
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
## 将node节点加入进master节点的集群里 (三台机器都执行)
kubeadm join 192.168.145.133:6443 --token xiwdb1.ivwp175n7l2c7mad \
--discovery-token-ca-cert-hash sha256:7ff5423635326f54a5b901f4caec367170fa6d2f29fe095434d5d42d6f0bfe93
kubeadm init 成功
kubeadm join 192.168.145.133:6443 --token xiwdb1.ivwp175n7l2c7mad \
--discovery-token-ca-cert-hash sha256:7ff5423635326f54a5b901f4caec367170fa6d2f29fe095434d5d42d6f0bfe93
k8s部署Nginx
附录1 Docker安装
- Docker 要求 CentOS 系统的内核版本高于 3.10
# 查看内核版本 uname ‐r
- 安装需要的软件包, yum-utils提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
# yum-util 提供yum-config-manager功能 yum install -y yum‐utils # 设置yum源,并更新 yum 的包索引 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo yum makecache fast # 注意: 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。 # vim /etc/yum.repos.d/docker-ce.repo # 将[docker-ce-test]下方的enabled=0修改为enabled=1 # # 安装指定版本的Docker-CE: # Step 1: 查找Docker-CE的版本: # yum list docker-ce.x86_64 --showduplicates | sort -r # Loading mirror speeds from cached hostfile # Loaded plugins: branch, fastestmirror, langpacks # docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable # docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable # docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable # Available Packages # Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos) # sudo yum -y install docker-ce-[VERSION]
- 查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
- 安装docker
yum install docker-ce-19.03.9-3.el7 -y # 这是指定版本安装
- 启动docker并加入开机启动
systemctl start docker && systemctl enable docker
- 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
- docker 镜像加速
- 登录阿里云https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
- 登录阿里云https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
附录2 yum k8s问题
- ‘ascii’ codec can’t decode byte 0xe2 in position 719: ordinal not in range(128)
- 原因: 网上搜是python2的编码问题
- 解决方法:
cat > /usr/lib/python2.7/site-packages/sitecustomize.py << EOF #encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf-8') EOF # 重启python编译器 python
附录3 k8s start问题
- systemctl status kubelet -l 查看k8s启动状态发现启动失败,
-
journalctl -xefu kubelet 查看启动日志,发现:
Jan 30 10:30:20 k8s-node1 kubelet[1797]: F0130 10:30:20.011562 1797 server.go:199] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file “/var/lib/kubelet/config.yaml”, error: open /var/lib/kubelet/config.yaml: no such file or directory
-
解决方案:
# 执行kubeadm init kubeadm init --kubernetes-version=v1.18.0 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.***.***
-
附录4 k8s master init问题
-
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
- 原因:检测到"cgroupfs"作为Docker的cgroup驱动程序。 推荐使用systemd驱动需要更换驱动,修改docker Driver
- 解决方案:
# 修改配置文件 vim /etc/docker/daemon.json # 增加以下配置json { "exec-opts":["native.cgroupdriver=systemd"] } # 重启docker systemctl restart docker