Centos7使用kubeadm安装单机k8s

3 篇文章 0 订阅
2 篇文章 0 订阅

1. Centos7使用kubeadm安装单机k8s v1.27

本文参考自k8s官方文档-安装kubeadm,自己学习开发k8s使用单机版就可以了。部署集群和单机差别不大,主要是在节点机器使用root用户执行kubeadm join命令即可。

1.1. 准备工作

1.1.1. 配置主机名

为了集群内节点的直接调用,需要配置主机名解析,在服务器上修改/etc/hosts文件:

192.168.56.102 master

接下来修改hostname:

hostnamectl set-hostname master

1.1.2. 关闭服务

为什么要关闭?请参考知乎问题部署 Kubernetes(k8s)时,为什么要关闭 swap、selinux、防火墙?

Note:关闭后需要重启服务器

  • 关闭防火墙

    1. 关闭防火墙: systemctl stop firewalld
    2. 更新配置:systemctl daemon-reload
    3. 取消开机启动:systemctl disable firewalld
  • 关闭 swap

    • 临时关闭:swapoff -a,重启后会失效。
    • 永久关闭:编辑文件/etc/fstab,注释swap分区那一行
  • 关闭 selinux

    • 临时关闭:setenforce 0,重启后会失效
    • 永久关闭:编辑文件/etc/selinux/config,修改SELINUX为SELINUX=disabled

1.2. 安装容器运行时

k8s支持多种容器运行时,本文选择安装containerd。当然安装docker也是可以的,因为安装时也会安装containerd

centos7 的安装很简单,按照官网的教程Install Docker Engine on CentOS来即可。

1.2.1. 配置 yum 源

docker官方的软件源地址在国外,这里改成了腾讯镜像的。

cat <<EOF | tee /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - 7
baseurl=https://mirrors.cloud.tencent.com/docker-ce/linux/centos/7/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.cloud.tencent.com/docker-ce/linux/centos/gpg
EOF

1.2.2. 安装containerd

配置好源后直接使用 yum 安装即可。

yum install containerd.io -y
# 初始化配置文件,默认生成的会禁用cri
containerd config default > /etc/containerd/config.toml
# 启动程序
systemctl start containerd
# 配置为开机启动
systemctl enable containerd

1.2.3. 配置containerd

docker 镜像服务器在国外,因此国内访问会很慢。好在阿里推出镜像加速器,在阿里云的容器镜像服务可以找到教程。

当systemd是初始化系统时,k8s需要使用systemd作为cgroup驱动,因此需要修改配置。

默认情况下,containerd的相关元数据存储在/var/lib/containerd,最好将其改为大空间的路径。

使用命令修改配置文件/etc/containerd/config.toml,将对应处修改为下面的值:

root = "/home/containerd"
[plugins."io.containerd.grpc.v1.cri"]
  sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://a79n7bst.mirror.aliyuncs.com"]

修改好配置后,需要重启使配置生效:

systemctl restart containerd

1.3. 配置 iptables

k8s 需要使用 iptables 转发流量,可以通过命令查看是否正确配置。

# 查看模块是否被加载
lsmod | grep br_netfilter
lsmod | grep overlay
# 查看sysctl参数是否都为1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

如果没有被配置好,可以使用下面命令配置:

cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 重新加载
sysctl --system

1.4. 安装 kubeadm、kubelet 和 kubectl

需要在集群内所有机器安装以下软件:

  • kubeadm:用来初始化集群
  • kubelet:在集群中的节点上用来启动 pod 和容器等
  • kubectl:用来与集群通信的命令行工具

1.4.1. 配置 yum 源

k8s 官网的文档用的是 google 的源,因此需要改成国内的源。

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.cloud.tencent.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

1.4.2. 安装软件

Note:安装完不需要重启服务器,否则会出现网卡没启动问题

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable kubelet

1.4.3. 初始化控制平面节点

使用 kubeadm 命令即可创建一个控制平面节点,即master节点:

根据flannel 文档说明,flannel 和 kubeadm 一起使用需要配置pod-network-cidr

NOTE: If kubeadm is used, then pass --pod-network-cidr=10.244.0.0/16 to kubeadm init to ensure that the podCIDR is set.

kubeadm使用到的镜像可以通过命令查看:

kubeadm config images list
# 默认镜像地址是谷歌的,需要替换为国内镜像地址
kubeadm init --apiserver-advertise-address=192.168.56.102 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

Note:如果无法下载镜像,可以使用 docker 拉取镜像,然后重新 tag,最后再重新执行初始化命令:

# coredns的版本号在kubeadm init报错日志可以找到
docker pull coredns/coredns:1.8.4
docker tag coredns/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
# 重新初始化
kubeadm init --apiserver-advertise-address=192.168.56.102 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

修改配置文件,使普通用户可以运行kubectl:

# 切换到对应用户,这里是sun
su - sun
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 如果是root用户,该命令可以不用执行
sudo chown $(id -u):$(id -g) $HOME/.kube/config

1.4.4. 安装网络附加组件

k8s 支持多种网络组件,这里选择flannel,因为它配置比较简单。

访问网站下载 docker 镜像https://github.com/flannel-io/flannel/releases,下载完成后上传到master服务器,导入镜像:

ctr -n k8s.io images import flanneld-v0.22.1-amd64.docker

下载 flannel 配置文件kube-flannel.yml:到flannel官网https://github.com/flannel-io/flannel下载zip包(这样比clone仓库速度快),下载后上传到master服务器

kubectl apply -f flannel-master/Documentation/kube-flannel.yml

等待一会再次查看集群节点状态:

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   21m   v1.27.4

1.5. 控制平面节点参与调度

默认情况下,出于安全原因,k8s不会在控制平面节点上调度pod。不过可以使用命令解除该限制:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

1.6. 创建存储类

默认安装时是没有存储类的,需要手动配置。

参照官方文档-存储类官方文档-改变默认StorageClass,创建文件default-storageclass.yaml:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

执行以下命令安装和修改:

# 创建storage class
kubectl apply -f default-storageclass.yaml
# 将StorageClass改为默认
kubectl patch storageclass local-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
# 查看系统的StorageClass
kubectl get sc

1.7. 部署服务验证功能

此处使用 k8s 部署一个 nginx,来验证集群是否正常。

  • 创建一个 deployment
[root@master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created

[root@master ~]# kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           11s

Note: 如果READY不为1/1,可使用kubectl describe pod查看日志。

  • 创建一个 service 使 nginx 可以被访问
[root@master ~]# kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
service/nginx exposed

[root@master ~]# kubectl get services
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        24m
nginx        NodePort    10.99.30.130   <none>        80:32551/TCP   26s

创建好service后,就可以在集群外部访问了。在集群内部可以使用CLUSTER-IP。

[root@master ~]# curl -s http://192.168.56.102:32551
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

[root@master ~]# curl http://10.99.30.130
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值