Centos7下部署k8s集群

Centos7下部署k8s集群

1.环境准备
角色/主机名ip
k8s-master192.168.132.155
k8s-node1192.168.132.156
2.基础设置
2.1 关闭防火墙(master/node操作)
systemctl stop firewalld && systemctl disable firewalld

2.2 关闭selinux(master/node操作)
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2.3 关闭swap(必须)(master/node操作)
swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab

2.4 配置时间同步(这里我直接和master进行同步)

在这里插入图片描述

2.5 配置内核参数(master/node操作)

将桥接的IPV4流量传递到iptables

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl  --system

3.安装docker(master/node操作)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker

4.添加阿里云yum软件源(master/node操作)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
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

5.安装kubeadm,kubelet和kubectl(master/node操作)
5.1 各组件作用
kubelet # 运行在 Cluster 所有节点上,负责启动 Pod 和容器。

kubeadm # 用于初始化 Cluster。

kubectl # 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
  • 在部署kubernetes时,要求master node和worker node上的版本保持一致,否则会出现版本不匹配导致奇怪的问题出现。本文将介绍如何在CentOS系统上,使用yum安装指定版本的Kubernetes。
  • 我们需要安装指定版本的kubernetes。那么如何做呢?在进行yum安装时,可以使用下列的格式来进行安装:
  • yum install -y kubelet- kubectl- kubeadm-
5.2 安装(master/node操作)
yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0
systemctl enable kubelet  #在这里只需enable,不用start

6.部署kubernetes Master(此步只在master上操作)
6.1 初始化kubeadm (master操作)
[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.132.155 \ 
--image-repository registry.aliyuncs.com/google_containers \ 
--kubernetes-version v1.19.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all

解释:

  • –apiserver-advertise-address=192.168.132.155 #集群通告地址,填写master物理网卡地址
  • –image-repository #指定阿里云镜像仓库地址(#指定从什么位置拉取镜像,默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers)
  • –kubernetes-version v1.19.0 #k8s版本,与上面安装版本一致
  • –service-cidr=10.1.0.0/16 #集群内部虚拟网络,指定Cluster IP的网段
  • –pod-network-cidr=10.244.0.0/16 #指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。
  • –ignore-preflight-errors=all #忽略安装过程中的一些错误

备注:初始化出错的时候,想要重新做执行kubeadm reset

初始化执行的时候,出现错误:

报错1:
Aug  6 21:14:41 localhost kubelet: E0806 21:14:41.164994   72318 server.go:294] "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""
Aug  6 21:14:41 localhost systemd: kubelet.service: main process exited, code=exited, status=1/FAILURE
Aug  6 21:14:41 localhost systemd: Unit kubelet.service entered failed state.
Aug  6 21:14:41 localhost systemd: kubelet.service failed.
Aug  6 21:14:41 localhost systemd: Stopped kubelet: The Kubernetes Node Agent.

解决报错1方案:

原因:docker和k8s使用的cgroup不一致导致
说明:可以只修改docker,docker不再设置native.cgroupdriver=systemd,或将systemd改成cgroupfs,改成和k8s一样(k8s默认是cgroupfs,但是他竟然推荐用systemd,上文报错中可看出)。

1.echo y | kubeadm reset #重置
2. cat /etc/docker/daemon.json #更改docker cgroupdirver为systemd
{
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
                 "max-size": "100m"
        },
        "storage-driver": "overlay2",
        "storage-opts": [
        "overlay2.override_kernel_check=true"
        ],
        "data-root": "/data/docker"
}
3. cat > /var/lib/kubelet/config.yaml <<EOF  #更改kubelet croupdriver为systemd
> apiVersion: kubelet.config.k8s.io/v1beta1
> kind: KubeletConfiguration
> cgroupDriver: systemd
> EOF
4.systemctl daemon-reload #重启服务
  systemctl restart docker
  systemctk restart kubelet
5.重新执行初始化
[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.132.155 \ 
--image-repository registry.aliyuncs.com/google_containers \ 
--kubernetes-version v1.19.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all

执行成功:

在这里插入图片描述

最后一段保存下来,后续添加节点会用到:kubeadm join 192.168.132.155:6443 --token b3dsrl.hqw7s4ew9n6setrl \ --discovery-token-ca-cert-hash sha256:aac25e1d77c5550fe2fb6491758597eb555a349dfb3f80ee37833ecb075c75d2

报错2:
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error

解决报错2方案:发现和报错1是同一个问题

6.2 使用kubectl工具 (master操作)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

下面就可以使用kubectl工具了

在这里插入图片描述

node节点为NotReady,因为coredns pod没有启动,缺少网络pod。

在这里插入图片描述
在这里插入图片描述

7.安装calico网络 (master操作)
wget https://docs.projectcalico.org/manifests/calico.yaml
vi calico.yaml

修改里面定义Pod网络(CALICO_IPV4POOL_CIDR)那行,该值与Kubeadm init指定的–pod-network-cidr需一致

在这里插入图片描述

在这里插入图片描述

过一会再查看信息,节点已经处于Ready状态了。
在这里插入图片描述

再次查看ndoe,状态已经为ready

在这里插入图片描述

8.将node节点加入集群(所有node节点操作)
  • 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令
  • 复制上面命令,在node节点上执行,记得更换对应的ip
  • 这里的–token 来自前面kubeadm init输出提示,如果当时没有记录下来可以通过kubeadm token list 查看
kubeadm join 192.168.132.155:6443 --token l2og78.ut1s3rsawplgd3pp \
    --discovery-token-ca-cert-hash sha256:3df6de298e664ba155b0748f9901c3966a2dc29e4b4cc28c2fdded1d136a22c1

在这里插入图片描述

查看节点状态

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河 静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值