--- notion-id: 436ce6a1-fa69-4d0f-85aa-b8ced8daa92c --- ## 修改HOSTMANE ```shell hostnamectl set-hostname ``` # **系统固定IP地址** ```shell vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改并添加 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" # 设置为静态 DEFROUTE="yes" IPADDR="10.10.10.100" # 设置的固定IP地址 NETMASK="255.255.255.0" # 子网掩码 GATEWAY="10.10.10.252" # 您提供的网关地址 IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="e1fd5e03-5f3a-4a2d-b656-f435e1df5c82" DEVICE="ens33" ONBOOT="yes" DNS1="10.10.10.252" # Google的公共DNS 1 DNS2="114.114.114.114" # Google的公共DNS 2 #重启网络 sudo systemctl restart network #修改centos源文件 #备份 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #修改 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #更新缓存 sudo yum clean all sudo yum makecache ``` # **防火墙配置** ```shell sudo systemctl status firewalld #查看防火墙状态 sudo firewall-cmd --list-ports #查看防火墙开启端口 #添加防火墙端口 sudo firewall-cmd --add-port=6443/tcp --permanent sudo firewall-cmd --add-port=10250/tcp --permanent #重启防火墙 sudo firewall-cmd --reload #关闭防火墙【推荐 因为会导致部署失败】 sudo systemctl stop firewalld #永久关闭防火墙 sudo systemctl disable firewalld ``` # 安装配置DOCKER镜像源 ```shell wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo ``` ```shell yum -y install docker-ce-18.06.1.ce-3.el7 ``` ```shell #开机启动并且开启 systemctl enable docker && systemctl start docker sudo systemctl daemon-reload #重新加载 Systemd 守护进程的配置文件 sudo systemctl restart docker ``` ```shell sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://npn4djke.mirror.aliyuncs.com"] } EOF ``` ## 设定时间 ```shell #配置时间 sudo yum install -y ntp sudo systemctl start ntpd sudo systemctl enable ntpd #查看当前时间 timedatectl ``` # **关闭SELinux** SELinux在默认情况下可能会干扰Kubernetes的操作,所以你应该暂时关闭它: ```yaml sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config ``` # **禁用swap** Kubernetes需要禁用swap,你可以通过如下命令来实现: ```shell sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab sudo swapoff -a ``` ## MASTER配置host ```shell cat >> /etc/hosts << EOF 192.168.31.61 k8s-master 192.168.31.62 k8s-node1 192.168.31.63 k8s-node2 EOF ``` ## 将桥接的 IPv4 流量传递到 iptables 的链 ```shell cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system #重新加载所有可用配置文件中的 sysctl 设置 ``` # Kubernetes组件 对于Kubernetes组件的安装,首先设置Kubernetes的yum仓库: ```shell cat < 在运行 `**kubeadm init**` 后,会生成一个 `**/etc/kubernetes/admin.conf**` 文件。这个文件是一个 `**kubeconfig**` 文件,它包含了一些信息,包括:用来连接 Kubernetes API 服务器的地址和端口信息。默认的 namespace。用来进行身份验证的证书信息或者 token。 > 当你运行 `**export KUBECONFIG=/etc/kubernetes/admin.conf**` 后,你就告诉 `**kubectl**` 命令行工具在需要连接到 Kubernetes 集群时,应该从这个文件中读取上述信息。 > 如果你没有设置 `**KUBECONFIG**` 环境变量,`**kubectl**` 默认会从 `**~/.kube/config**` 文件中读取这些信息。你可以通过设置 `**KUBECONFIG**` 环境变量来改变这个默认行为,这样就可以方便地在不同的 Kubernetes 集群之间切换。 > 也就是说,`**KUBECONFIG**` 环境变量是 `**kubectl**` 知道如何连接到你的 Kubernetes 集群的关键。 ```yaml 将export KUBECONFIG=/etc/kubernetes/admin.conf配置进.bashrc 避免每次开机都要配置 ``` # **部署网络插件** [https://kubernetes.io/docs/concepts/cluster-administration/addons/](https://kubernetes.io/docs/concepts/cluster-administration/addons/) ## 网络插件 ```shell #Calico 网络插件 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml #WEAVE kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml ``` ### WEAVE插件 ```shell kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml ``` ## WEAVE-SCOPE ```shell kubectl apply -f https://github.com/weaveworks/scope/releases/download/v1.13.2/k8s-scope.yaml ``` [https://zhuanlan.zhihu.com/p/586486482](https://zhuanlan.zhihu.com/p/586486482) [WEAVE\_SCOPE\_YAML](家庭实验室/Docker服务/Kubernetes初始部署流程/WEAVE_SCOPE_YAML.md) > [!note]+ 插件删除 > 1. 首先,你需要彻底删除原有的网络插件。对于大部分网络插件,你可以运行 `**kubectl delete -f**` 命令并指向原插件的 YAML 文件,例如 `**kubectl delete -f calico.yaml**`。然而,这不一定会删除所有相关资源,你可能还需要手动删除一些遗留的网络接口、配置或数据。 > 2. 其次,你需要确保所有的节点都清理了原有网络插件的遗留,并且已经就绪。这可能需要重启节点,或者运行一些特定的清理脚本。 > 3. 最后,你可以部署新的网络插件。这通常是通过运行 `**kubectl apply -f**` 命令并指向新插件的 YAML 文件,例如 `**kubectl apply -f weave.yaml**`。 > > 这个过程可能会引起集群的服务中断,因为在新的网络插件部署并开始工作之前,Pod 之间可能无法进行网络通信。所以,在生产环境中,这种操作应该在维护窗口内进行,并且需要提前通知所有的用户和利益相关者。 ### 测试集群 ```shell kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get pod,svc 访问地址:http://NodeIP:Port ``` ## 配置kubernetes dashboard [https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/) ## 参考文献 [https://www.cnblogs.com/chen2ha/p/17086962.html](https://www.cnblogs.com/chen2ha/p/17086962.html) **注意要点可以先下载配置文件并配置nodeport ,如果出现必须https访问可以输入**`thisisunsafe` ```shell #安装 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml #配置代理 kubectl proxy --address='0.0.0.0' --accept-hosts='^.*$' --port=8001 #外网访问 https://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ kubectl get secret --all-namespaces -o wide ``` `注意自定配置【NodePort】` [[IMG-20260516155648708.yaml]] ```bash 只需要通过IP:nodeprot 就可以登陆 ``` ### **Service Account,ClusterRoleBinding,long-lived**配置合集 [[IMG-20260516155648758.yaml]] ### **Creating a Service Account** ```yaml apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard ``` ### **Creating a ClusterRoleBinding** ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard ``` ### **Getting a Bearer Token for ServiceAccount** ```yaml kubectl -n kubernetes-dashboard create token admin-user ``` ### **Getting a long-lived Bearer Token for ServiceAccount** ```yaml apiVersion: v1 kind: Secret metadata: name: admin-user namespace: kubernetes-dashboard annotations: kubernetes.io/service-account.name: "admin-user" type: kubernetes.io/service-account-token ``` ```yaml kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d ``` ### **Clean up and next steps** ```yaml kubectl -n kubernetes-dashboard delete serviceaccount admin-user kubectl -n kubernetes-dashboard delete clusterrolebinding admin-user ```