centos7 搭建 k8s 集群

说明

创建三个 centos 节点:

1
2
3
192.168.56.101 k8s-master
192.168.56.102 k8s-nnode1
192.168.56.103 k8s-nnode2

虚拟机安装教程参考:virtualbox 下 centos7 网络配置

其中 master 节点需要至少 2 核 2G 配置

所有节点

以下操作需要在所有节点运行,这里以 master 节点为例

修改主机名

相应节点叫相应的名字,这里以 master 节点为例

1
hostnamectl set-hostname k8s-master

修改后重启服务器后生效

修改主机名

关闭防火墙

1
systemctl stop firewalld.service

关闭防火墙

关闭防火墙自启动

1
systemctl disable firewalld.service

关闭防火墙自启动

关闭 selinux

1
setenforce 0

关闭selinux

关闭 swap

1
swapoff -a

关闭 swap

vim /etc/fstab ,注释掉swap挂载这一行可以永久关闭swap分区

永久关闭 swap

添加主机名与 IP 对应的关系

vim /etc/hosts 添加如下内容:

1
2
3
192.168.56.101 k8s-master
192.168.56.102 k8s-node1
192.168.56.103 k8s-node2

将桥接的 IPV4 流量传递到 iptables 的链

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

执行完再运行

1
sysctl --system

将桥接的 IPV4 流量传递到 iptables 的链

安装 docker

  • 卸载旧的 docker

    1
    2
    3
    4
    5
    6
    7
    8
    sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

    卸载旧的 docker

  • 安装组件

    1
    2
    3
    sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

    安装组件

  • 添加 docker 安装源

    1
    2
    3
    sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

    添加 docker 安装源

  • 安装 docker

    1
    sudo yum install docker-ce docker-ce-cli containerd.io

    安装 docker

  • 安装成功后,查看 docker 版本

    1
    docker --version

    docker 版本

  • 修改 Cgroupfs 为 Systemd (docker 文件驱动默认由 cgroupfs 改成 systemd,与k8s保持一致避免 conflict)

    1
    2
    mkdir -p /etc/docker
    vim /etc/docker/daemon.json

    内容:

    1
    2
    3
    {
    "exec-opts": ["native.cgroupdriver=systemd"]
    }
  • 设置开机启动

    1
    2
    systemctl enable docker
    systemctl start docker

    docker 自启动

  • 查看文件驱动

    1
    docker info | grep Driver

    docker 文件驱动

Kubernetes yum源配置

vim /etc/yum.repos.d/kubernetes.repo,添加文件内容如下:

1
2
3
4
5
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enabled=1

安装 k8s

1
yum install -y docker-ce kubelet kubeadm kubectl
  • 设置 k8s 开机启动

    1
    systemctl enable kubelet

    k8s 开机启动

  • 启动 k8s 后台 daemon

    1
    systemctl start kubelet

master 节点运行

以下操作只在 master 节点运行,如果操作失败,可以通过先执行 rm -rf $HOME/.kubekubeadm reset 命令来清理环境重新安装

部署 Kubernetes Master

1
2
3
4
kubeadm init --kubernetes-version=1.20.4  \
--apiserver-advertise-address=192.168.56.101 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=192.168.56.0/16 --pod-network-cidr=10.122.0.0/16

apiserver-advertise-address 的地址为当前节点的 ip 地址

service-cidr 设置成当前节点的网段即可

部署 k8s master

k8s master部署

记录生成的最后部分内容,此内容需要在其它节点加入 Kubernetes 集群之前就执行。根据 init 后的提示,创建kubectl 配置文件

1
2
3
4
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config

kubectl 配置

查看 docker 镜像:

1
sudo docker images

docker 镜像

下面就可以直接使用 kubectl 命令了

1
kubectl get node

kubectl get node

安装 calico 网络

1
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

安装 calico 网络

查看 calico 网络是否创建成功:

1
kubectl get pods -n kube-system

calico

再次查看 node,可以看到 master 节点状态为 ready

master状态

至此,k8s master节点创建完毕

node 节点运行

Node 节点才需要进行的操作

node 节点加入集群

向集群添加新节点,执行在 kubeadm init 输出的 kubeadm join 命令:复制上面命令,在 node 节点上执行在k8s-node1, k8s-node2 执行:

token 和密钥在主节点 init 会生成

如果忘记记录 token 和密钥,或者 token 过期了,可以通过以下命令获取(在 master 节点运行)

  • 先获取 token

    1
    2
    3
    4
    #如果过期可先执行此命令
    kubeadm token create #重新生成token
    #列出token
    kubeadm token list | awk -F" " '{print $1}' |tail -n 1

    token

  • 获取 CA 公钥的哈希值

    1
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed  's/^ .* //'

    CA 公钥哈希值

  • 从节点加入集群 (k8s-node1 和 k8s-node2 执行)

    1
    kubeadm join 192.168.56.101:6443 --token token填这里 --discovery-token-ca-cert-hash sha256:哈希值填这里

    192.168.56.101:6443 —> k8s-master 节点的 ip 和端口

    最终运行命令

    1
    kubeadm join 192.168.56.101:6443 --token ljd4iy.mk633re8cfq42ybu --discovery-token-ca-cert-hash sha256:344376e98d61c6fb52d35ab369e13dcc49c4222972d4b5f821aea4f589fe593f

    从节点加入集群

在 k8s-master 查看集群节点数:

1
kubectl get nodes

节点数

测试 k8s

  • 创建 nginx 实例,并暴露端口:

    1
    2
    3
    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80 --type=NodePort
    kubectl get pod,svc

    创建 nginx 实例

  • 验证

    在 web 浏览器输入以下地址,会返回 nginx 欢迎界面

    http://192.168.56.101:32409/ (该端口为上图所显示)

    在 linux 节点用 curl 访问,会返回 nginx html 欢迎页面的内容

node 节点配置 kubectl 配置

如果想 node 节点也可以使用 kubectl 需要进行 master 节点复制 config 文件到 node 节点

在 k8s-node1 和 k8s-node2 节点执行以下命令

1
2
3
4
sudo scp [email protected]:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node 节点配置 kubectl

参考

如何从零开始搭建一个完整的K8S集群——-基于CentOS 8系统

kubeadm生成的token重新获取

CentOS7 部署K8S集群成功后,重启就不能用了???k8s环境自启动

显示 Gitment 评论
0%