1.修改主机名称
hostnamectl set-hostname  master
hostnamectl set-hostname  node
hostnamectl set-hostname  node


2.关闭防火墙:
$ systemctl stop firewalld
$ systemctl disable firewalld

关闭selinux:
$ sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
$ setenforce 0  # 临时

关闭swap:
$ swapoff -a  # 临时
$ vim /etc/fstab  # 永久

在master添加hosts:(内网ip)
$ cat >> /etc/hosts << EOF
192.168.146.131 k8s-master
192.168.146.132 k8s-node1
192.168.146.133 k8s-node2
EOF

将桥接的IPv4流量传递到iptables的链:
$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl --system  # 生效


3.阿里云源镜像最小化安装默认yum源是没有修改的,很多功能也是没有的 比如 vim wget netstat 等等
所以我针对着写了一个shell 脚本 运行就可以直接使用了
#!/bin/bash

# 检查是否以root用户运行
if [ "$(id -u)" -ne 0 ]; then
    echo -e "${RED}错误:此脚本必须以root用户身份运行${NC}"
    exit 1
fi

# 创建日志文件
LOG_FILE="/var/log/yum_repo_update_$(date +%Y%m%d_%H%M%S).log"
exec > "$LOG_FILE" 2>&1

echo -e "${GREEN}开始执行yum源替换脚本...${NC}"
echo -e "当前时间: $(date)\n"

# 1. 切换到yum.repos.d目录
echo -e "${YELLOW}[步骤1] 切换到/etc/yum.repos.d目录${NC}"
cd /etc/yum.repos.d/ || {
    echo -e "${RED}错误:无法切换到/etc/yum.repos.d目录${NC}"
    exit 1
}

# 2. 备份现有repo文件
echo -e "${YELLOW}[步骤2] 备份现有repo文件${NC}"
if [ ! -d "backup" ]; then
    mkdir backup || {
        echo -e "${RED}错误:无法创建备份目录${NC}"
        exit 1
    }
fi

mv *.repo backup/ 2>/dev/null
echo -e "已备份现有repo文件到: $(pwd)/backup/\n"

# 3. 下载阿里云CentOS-8.repo
echo -e "${YELLOW}[步骤3] 下载阿里云CentOS-8.repo${NC}"
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo || {
    echo -e "${RED}错误:下载阿里云repo文件失败${NC}"
    exit 1
}
echo -e "已成功下载阿里云CentOS-8.repo\n"

# 4. 替换镜像源地址
echo -e "${YELLOW}[步骤4] 替换镜像源地址${NC}"
sed -i -e "s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g" /etc/yum.repos.d/CentOS-*
sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*
echo -e "已更新镜像源地址\n"

# 5. 清理并生成缓存
echo -e "${YELLOW}[步骤5] 清理并生成yum缓存${NC}"
yum clean all && yum makecache || {
    echo -e "${RED}错误:生成yum缓存失败${NC}"
    exit 1
}

echo -e "\n${GREEN}yum源替换完成!${NC}"
echo -e "所有操作已记录到: ${LOG_FILE}"
echo -e "当前时间: $(date)"

# 显示最终的repo列表
echo -e "\n${YELLOW}当前生效的yum源列表:${NC}"
ls -l /etc/yum.repos.d/

# 6. 下载基础软件
# 定义要安装的软件包列表
packages=("vim" "wget" "net-tools")


# 循环安装所有软件包
for pkg in "${packages[@]}"; do
    echo "正在安装 $pkg..."
    if yum install -y "$pkg"; then
        echo "$pkg 安装成功"
    else
        echo "$pkg 安装失败"
        exit 1
    fi
done

echo "所有软件包安装完成"


exit 0


#执行脚本
sh /root/Initialization_script.sh


二.集群安装部署
1、在所有节点安装docker,Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y container-selinux
yum clean packages && yum clean all && yum makecache
yum install -y docker-ce docker-ce-cli containerd.io 如不成功,则执行后边 yum install -y docker-ce docker-ce-cli containerd.io --nobest
yum -y install docker-ce
systemctl enable docker && systemctl start docker


#配置镜像下载加速器
#registry-mirrors:修改镜像源
#exec-opts:修改docker cgroup(k8s 1.2版本以上需要修改)
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],     
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
$ systemctl restart docker

2、在所有节点安装kubeadm,kubelet和kubectl
#添加阿里云yum软件源
$ 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

#安装k8s(注意版本号,后面的版本需要对应)
$ yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
$ systemctl enable kubelet

3、在master节点执行kubeadm初始化
kubeadm init \
      --apiserver-advertise-address=192.168.229.141 \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version v1.21.0 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16 \
      --ignore-preflight-errors=all
      
#-–apiserver-advertise-address 集群通告地址(master内网)  192.168.229.141  是master节点的ip地址
#–-image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
#–-kubernetes-version K8s版本,与上面安装的一致
#–-service-cidr 集群内部虚拟网络,Pod统一访问入口
#-–pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

4、node节点加入k8s集群
token有效期为24小时,如果过期,需要重新创建token:
kubeadm token create --print-join-command  #快捷生成方式

拷贝kubectl使用的连接k8s认证文件到默认路径:

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl get nodes
NAME             STATUS      ROLES                  AGE     VERSION
master           NotReady    control-plane,master   2d23h   v1.21.0
node             NotReady    <none>                 2d11h   v1.21.0
node             NotReady    <none>                 2d      v1.21.0


5、master节点部署容器网络(CNI)这里介绍calico部署
Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括Kubernetes、OpenStack等。
Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。
此外,Calico 项目还实现了 Kubernetes 网络策略,提供ACL功能。

$ wget https://docs.projectcalico.org/manifests/calico.yaml
 
#这里面的镜像源有问题我们使用sed命令进行替换
 
sed -i \
-e 's|docker.io/calico/cni:v3.25.0|registry.cn-hangzhou.aliyuncs.com/rainux/calico:cni-v3.25.0|g' \
-e 's|docker.io/calico/node:v3.25.0|registry.cn-hangzhou.aliyuncs.com/rainux/calico:node-v3.25.0|g' \
-e 's|docker.io/calico/kube-controllers:v3.25.0|registry.cn-hangzhou.aliyuncs.com/rainux/calico:kube-controllers-v3.25.0|g' \
calico.yaml
 
 
$ kubectl apply -f calico.yaml
$ kubectl get nodes
NAME                     STATUS   ROLES                  AGE     VERSION
master-192.168.146.131   Ready    control-plane,master   2d23h   v1.21.0
node-192-168-146-132     Ready    <none>                 2d11h   v1.21.0
node-192-168-146-133     Ready    <none>                 2d      v1.21.0


6、验证
kubectl  get pod -A
]NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-7c7b5b6c7d-ldjvr         1/1     Running   0          16h
kube-system   calico-node-55vhm                                1/1     Running   0          16h
kube-system   calico-node-pjdjs                                1/1     Running   0          16h
kube-system   calico-node-th2ct                                1/1     Running   0          16h
kube-system   coredns-545d6fc579-pghnt                         1/1     Running   0          3d
kube-system   coredns-545d6fc579-xt8vs                         1/1     Running   0          2d
kube-system   etcd-master-192.168.146.131                      1/1     Running   2          3d
kube-system   kube-apiserver-master-192.168.146.131            1/1     Running   4          2d23h
kube-system   kube-controller-manager-master-192.168.146.131   1/1     Running   5          2d23h
kube-system   kube-proxy-4lls9                                 1/1     Running   0          2d
kube-system   kube-proxy-jvs67                                 1/1     Running   1          2d12h
kube-system   kube-proxy-l2fc7                                 1/1     Running   2          2d23h
kube-system   kube-scheduler-master-192.168.146.131            1/1     Running   4          2d23h


如遇到拉取镜像不成功的,则可以用docker拉取镜像,并用tar进行重新命令,然后再删除pod名字后,观察看是否是running状态。

例如:

kubectl get pods -A

kubectl describe pod {pod-name} -n {namespece}

查看是哪个镜像没下载下来,然后在网上找到这个镜像的下载资源,用docker下载资源后,用tar 重命名镜像资源。

将镜像放到另外几台node节点上(可传输也可以下载后用tar重命名)

然后在master 执行kubectl delete -f xxx.yaml   再执行  kubectl  apply   -f    xxx.yaml

再执行kubectl  get pod -A   看状态是否是running

安装dashboard界面

1.根据Kubernetes版本,从官方GitHub仓库下载对应的Dashboard配置文件。例如,对于Kubernetes 1.17及以上版本,可使用以下命令下载:

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml -O dashboard.yaml

2.修改配置文件(可选)
若需将Dashboard暴露到外部网络,可修改配置文件中的Service类型为 NodePort,并指定端口号。例如:

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard

3.部署Dashboard
使用 kubectl 命令应用配置文件,部署Dashboard:

kubectl apply -f dashboard.yaml

4.创建管理员用户并获取Token
为方便登录,创建一个具有管理员权限的ServiceAccount,并获取其Token:

kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

5.访问Dashboard
通过浏览器访问 https://<节点IP>:<NodePort>(如 https://192.168.1.100:30001),使用上一步获取的Token进行登录。

备注:如 https://<节点IP>:<NodePort>打不开,则在浏览器的空白处输入:thisisunsafe

即可跳过验证,这个方法仅限于在自己电脑上部署或测试环境。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐