冰河教你一次性成功安装K8S集群(基于一主两从模式),Java面试题汇总

本文提供了一种在一主两从模式下安装Kubernetes集群的详细步骤,包括配置K8S yum源、卸载旧版本、安装组件、修改Docker设置、初始化Master节点和Worker节点等。同时,文章还提到了Java面试的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

chmod a+x ./sys_config.sh

执行sys_config.sh脚本文件。

./sys_config.sh

安装K8S


分别在三台服务器上安装K8S。

1.配置K8S yum源

新建k8s_yum.sh脚本文件。

vim k8s_yum.sh

文件的内容如下所示。

cat < /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

EOF

赋予k8s_yum.sh脚本文件的可执行权限。

chmod a+x ./k8s_yum.sh

执行k8s_yum.sh文件。

./k8s_yum.sh

2.卸载旧版本的K8S

yum remove -y kubelet kubeadm kubectl

3.安装kubelet、kubeadm、kubectl

yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2

4.修改docker Cgroup Driver为systemd

sed -i “s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g” /usr/lib/systemd/system/docker.service

5.重启 docker,并启动 kubelet

systemctl daemon-reload

systemctl restart docker

systemctl enable kubelet && systemctl start kubelet

综合安装脚本


综上,上述安装Docker、进行系统设置,安装K8S的操作可以统一成auto_install_docker_k8s.sh脚本。脚本的内容如下所示。

#安装Docker 19.03.8

export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com

dnf install yum*

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io

systemctl enable docker.service

systemctl start docker.service

docker version

#配置阿里云镜像加速器

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-‘EOF’

{

“registry-mirrors”: [“https://zz3sblpi.mirror.aliyuncs.com”]

}

EOF

systemctl daemon-reload

systemctl restart docker

#安装nfs-utils

yum install -y nfs-utils

yum install -y wget

#关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

#关闭SeLinux

setenforce 0

sed -i “s/SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config

关闭 swap

swapoff -a

yes | cp /etc/fstab /etc/fstab_bak

cat /etc/fstab_bak |grep -v swap > /etc/fstab

#修改 /etc/sysctl.conf

如果有配置,则修改

sed -i “s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g” /etc/sysctl.conf

sed -i “s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g” /etc/sysctl.conf

sed -i “s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g” /etc/sysctl.conf

sed -i “s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g” /etc/sysctl.conf

sed -i “s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g” /etc/sysctl.conf

sed -i “s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g” /etc/sysctl.conf

sed -i “s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g” /etc/sysctl.conf

可能没有,追加

echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf

echo “net.bridge.bridge-nf-call-ip6tables = 1” >> /etc/sysctl.conf

echo “net.bridge.bridge-nf-call-iptables = 1” >> /etc/sysctl.conf

echo “net.ipv6.conf.all.disable_ipv6 = 1” >> /etc/sysctl.conf

echo “net.ipv6.conf.default.disable_ipv6 = 1” >> /etc/sysctl.conf

echo “net.ipv6.conf.lo.disable_ipv6 = 1” >> /etc/sysctl.conf

echo “net.ipv6.conf.all.forwarding = 1” >> /etc/sysctl.conf

执行命令以应用

sysctl -p

配置K8S的yum源

cat < /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

EOF

卸载旧版本K8S

yum remove -y kubelet kubeadm kubectl

安装kubelet、kubeadm、kubectl,这里我安装的是1.18.2版本,你也可以安装1.17.2版本

yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2

修改docker Cgroup Driver为systemd

# 将/usr/lib/systemd/system/docker.service文件中的这一行 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

# 修改为 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd

如果不修改,在添加 worker 节点时可能会碰到如下错误

[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”.

Please follow the guide at https://kubernetes.io/docs/setup/cri/

sed -i “s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g” /usr/lib/systemd/system/docker.service

设置 docker 镜像,提高 docker 镜像下载速度和稳定性

如果您访问 https://hub.docker.io 速度非常稳定,亦可以跳过这个步骤

curl -sSL https://kuboard.cn/install-script/set_mirror.sh | sh -s ${REGISTRY_MIRROR}

重启 docker,并启动 kubelet

systemctl daemon-reload

systemctl restart docker

systemctl enable kubelet && systemctl start kubelet

docker version

注意:我安装的K8S版本是1.18.2,大家在安装K8S时,也可以选择其他版本进行安装

赋予auto_install_docker_k8s.sh脚本文件可执行权限。

chmod a+x ./auto_install_docker_k8s.sh

执行auto_install_docker_k8s.sh脚本文件。

./auto_install_docker_k8s.sh

注意:需要在每台服务器上执行auto_install_docker_k8s.sh脚本文件。

初始化Master节点


只在binghe101服务器上执行的操作。

1.初始化Master节点的网络环境

只在 master 节点执行

export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令

export MASTER_IP=192.168.175.101

替换 k8s.master 为 您想要的 dnsName

export APISERVER_NAME=k8s.master

Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中

export POD_SUBNET=172.18.0.1/16

echo “${MASTER_IP} ${APISERVER_NAME}” >> /etc/hosts

2.初始化Master节点

在binghe101服务器上创建init_master.sh脚本文件,文件内容如下所示。

#!/bin/bash

脚本出错时终止执行

set -e

if [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]; then

echo -e “\033[31;1m请确保您已经设置了环境变量 POD_SUBNET 和 APISERVER_NAME \033[0m”

echo 当前POD_SUBNET=$POD_SUBNET

echo 当前APISERVER_NAME=$APISERVER_NAME

exit 1

fi

查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2

rm -f ./kubeadm-config.yaml

cat < ./kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta2

kind: ClusterConfiguration

kubernetesVersion: v1.18.2

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

controlPlaneEndpoint: “${APISERVER_NAME}:6443”

networking:

serviceSubnet: “10.96.0.0/16”

podSubnet: “${POD_SUBNET}”

dnsDomain: “cluster.local”

EOF

kubeadm init

根据您服务器网速的情况,您需要等候 3 - 10 分钟

kubeadm init --config=kubeadm-config.yaml --upload-certs

配置 kubectl

rm -rf /root/.kube/

mkdir /root/.kube/

cp -i /etc/kubernetes/admin.conf /root/.kube/config

安装 calico 网络插件

参考文档 https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onpremises

echo “安装calico-3.13.1”

rm -f calico-3.13.1.yaml

wget https://kuboard.cn/install-script/calico/calico-3.13.1.yaml

kubectl apply -f calico-3.13.1.yaml

赋予init_master.sh脚本文件可执行权限。

chmod a+x ./init_master.sh

执行init_master.sh脚本文件。

./init_master.sh

3.查看Master节点的初始化结果

(1)确保所有容器组处于Running状态

执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态

watch kubectl get pod -n kube-system -o wide

如下所示。

[root@binghe101 ~]# watch kubectl get pod -n kube-system -o wide

Every 2.0s: kubectl get pod -n kube-system -o wide binghe101: Sat May 2 23:40:33 2020

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

calico-kube-controllers-5b8b769fcd-l2tmm 1/1 Running 0 3m59s 172.18.203.67 binghe101

calico-node-8krsl 1/1 Running 0 3m59s 192.168.175.101 binghe101

coredns-546565776c-rd2zr 1/1 Running 0 3m59s 172.18.203.66 binghe101

coredns-546565776c-x8r7l 1/1 Running 0 3m59s 172.18.203.65 binghe101

etcd-binghe101 1/1 Running 0 4m14s 192.168.175.101 binghe101

kube-apiserver-binghe101 1/1 Running 0 4m14s 192.168.175.101 binghe101

kube-controller-manager-binghe101 1/1 Running 0 4m14s 192.168.175.101 binghe101

kube-proxy-qnffb 1/1 Running 0 3m59s 192.168.175.101 binghe101

kube-scheduler-binghe101 1/1 Running 0 4m14s 192.168.175.101 binghe101

(2) 查看 Master 节点初始化结果

kubectl get nodes -o wide

如下所示。

[root@binghe101 ~]# kubectl get nodes -o wide

NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME

binghe101 Ready master 5m43s v1.18.2 192.168.175.101 CentOS Linux 8 (Core) 4.18.0-80.el8.x86_64 docker://19.3.8

初始化Worker节点


1.获取join命令参数

在Master节点上执行如下命令获取join命令参数。

kubeadm token create --print-join-command

具体执行如下所示。

[root@binghe101 ~]# kubeadm token create --print-join-command

W0502 23:44:55.218947 59318 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]

kubeadm join k8s.master:6443 --token s0hoh1.2cwyf1fyyjl2h04a --discovery-token-ca-cert-hash sha256:6d78e360dc64d84762611ac6beec8ac0f0fe9f72a5c2cca008df949e07827c19

其中,有如下一行输出。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?

掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

中,有如下一行输出。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-50IUbRXl-1711171286304)]
[外链图片转存中…(img-155Ek1Hy-1711171286305)]
[外链图片转存中…(img-DR0jwuVH-1711171286305)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-p22dRw8T-1711171286306)]

最后

面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?

掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

[外链图片转存中…(img-jT0Rjcs6-1711171286307)]

[外链图片转存中…(img-9HoJevgm-1711171286307)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值