Kubernetes 集群安装

一、环境的准备

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了,快去试试吧!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值