Kubernetes 集群安装
一、环境的准备1.检查操作系统的版本(推荐使用7.5以上的版本)cat /etc/redhat-release2.主机名的解析,为了方便后面集群节点间的直接调用,在/etc/hosts文件添加下面信息192.168.225.130 master192.168.225.131 node1192.168.225.132 node2配置完成后使用ping命名查看是否配置正确ping master3.时间
一、环境的准备
1.检查操作系统的版本(推荐使用7.5以上的版本)
cat /etc/redhat-release
2.主机名的解析,为了方便后面集群节点间的直接调用,在/etc/hosts文件添加下面信息
192.168.225.130 master
192.168.225.131 node1
192.168.225.132 node2
配置完成后使用ping命名查看是否配置正确
ping master
3.时间同步
kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间
#启动chronyd服务
systemctl start chronyd
#设置chronyd服务开机启动
systemctl enable chronyd
使用date命令查看时间是否同步了,结果一致
4.禁用iptables和firewalld服务
kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则和他们混淆,直接关闭系统的防火墙
#关闭firewalld服务
systemctl stop firewalld
#禁止firewalld服务开机启动
systemctl disable firewalld
-----------------------------
#关闭iptables服务
systemctl stop iptables
#禁止iptables服务开机启动
systemctl disable iptables
5.禁用selinux
selinux是linux系统的一个安全服务,不关闭会产生各种各样的问题
编辑/etc/selinux/config文件,修改SELINUX的值为disabled,修改后重启linux服务
6.禁用swap分区
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完后,将磁盘空间虚拟成内存使用。
启动swap设备会对系统性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap分区。
编辑/etc/fstab,注释掉swap分区一行
7.修改linux内核参数
编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip.forward = 1
重新加载配置
sysctl -p
加载网桥过滤模块
modprobe br_netfilter
查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter
8. 配置ipvs功能
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的,两者比较的话,ipvs性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
安装ipset和ipvsadm
yum install ipset ipvsadmin -y
#如果提示No package ipvsadmin available.需要使用
yum install ipvsadm
添加需要加载的模块写入脚本文件 /etc/sysconfig/modules/ipvs.modules
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
添加脚本文件执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
查看模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
9. 重启服务器
reboot
10.查看配置是否生效
selinux 和 swap 是否都已经禁用
#查看selinux状态
getenforce
#查看内存使用情况
free -m
二、组件的安装(docker、kubeadm、kubelet、kubectl)
1.docker的安装
#切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#查看当前镜像中支持的docker版本
yum list docker-ce --showduplicates
#安装指定版本的docker-ce
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
#添加docker的配置文件 /etc/docker/daemon.json
{
"exec-opts" : ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://k1ktap5m.mirror.aliyuncs.com"]
}
#启动docker
systemctl start docker
#设置docker开机自启
systemctl enable docker
2. 安装kubernetes组件
#切换国内镜像源
#编辑/etc/yum.repos.d/kubernetes.repo,添加下面配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
#安装kubeadm、kubelet、kubectl
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
#配置kubelet的cgroup
#编辑/etc/sysconfig/kubelet,添加如下配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
#设置开机自启
systemctl enable kubelet
3.准备集群镜像
3.1 查看所需镜像名称和版本
kubeadm config images list
3.2 由于网络原因,需要先从阿里云镜像仓库中下载镜像然后重新命名镜像名称
编写脚本文件(k8simages.sh)
#!/bin/bash
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
增加脚本文件的执行权限
chmod +x k8simages.sh
执行脚本
./k8simages.sh
查看拉取后的镜像
docker images
4.集群初始化(只需在master节点上执行即可)
--apiserver-advertise-address 的值为你的master节点的ip地址
kubeadm init --kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.225.130
完成后给出如下提示
4.1 创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.2 将node节点加入到集群中(根据提示到node节点执行命令)
kubeadm join 192.168.225.130:6443 --token k0rvxt.rejwm1apuipgoi71 \
--discovery-token-ca-cert-hash sha256:f202c7c57bad77f660ddffd2c827d10532ea77ce3347d629424a1e9e27d689fe
加入后结果
4.3 网络插件的安装 flannel (只需在master节点执行)
#获取flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#使用配置文件启动flannel
kubectl apply -f kube-flannel.yml
4.4 查看集群状态
kubectl get nodes
三台都是Ready状态表示成功
#如果长时间为NotReady 状态,需要修改/var/lib/kubelet/kubeadm-flags.env,删除 --network-plugin=cni
vim /var/lib/kubelet/kubeadm-flags.env
#重新启动
systemctl daemon-reload
systemctl restart kubelet
查看所有pod的状态
kubectl get pods --all-namespaces
三、遇到的问题
1. 使用pod 的ip 无法在集群中的其他节点上访问的问题?
这个是flannel安装的问题,需要重新安装正确的flannel版本。
2.cluster-ip无法访问的问题?
这里需要更改kube-proxy-xxx 的网络模式
#将mode改为'ipvs'
[root@master ~]# kubectl edit cm kube-proxy -n kube-system
...
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
strictARP: false
syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 127.0.0.1:10249
mode: "ipvs"
#更改完成之后删除掉以前的kube-proxy-xxxx,删除后kubectl会自动生成新的pod
kubectl delete pod kube-proxy-xxxx -n kube-system
还需要更改网卡设置Checksum offloading
#查看网卡的checksum是否关闭
[root@master ~]# ethtool -k flannel.1 | grep checksum
rx-checksumming: on
tx-checksumming: on ##### 当前为 on
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: on ##### 当前为 on
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
#暂时关闭
[root@master ~]# ethtool -K flannel.1 tx-checksum-ip-generic off
#永久关闭
[root@master ~]# vi /etc/systemd/system/k8s-flannel-tx-checksum-off.service
[Unit]
Description=Turn off checksum offload on flannel.1
After=sys-devices-virtual-net-flannel.1.device
[Install]
WantedBy=sys-devices-virtual-net-flannel.1.device
[Service]
Type=oneshot
ExecStart=/sbin/ethtool -K flannel.1 tx-checksum-ip-generic off
#开机自启和启动服务命令
[root@master ~]# systemctl enable k8s-flannel-tx-checksum-off
[root@master ~]# systemctl start k8s-flannel-tx-checksum-off
到此Kubernetes 集群的安装就ok了,快去试试吧!
更多推荐
所有评论(0)