Kubernetes初始部署流程.md 9.8 KB


notion-id: 436ce6a1-fa69-4d0f-85aa-b8ced8daa9

修改HOSTMANE

hostnamectl set-hostname <hostname>

系统固定IP地址

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

防火墙配置

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镜像源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
#开机启动并且开启
systemctl enable docker && systemctl start docker


sudo systemctl daemon-reload #重新加载 Systemd 守护进程的配置文件

sudo systemctl restart docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://npn4djke.mirror.aliyuncs.com"]
}
EOF

设定时间

#配置时间
sudo yum install -y ntp

sudo systemctl start ntpd

sudo systemctl enable ntpd

#查看当前时间
timedatectl

关闭SELinux

SELinux在默认情况下可能会干扰Kubernetes的操作,所以你应该暂时关闭它:

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

禁用swap

Kubernetes需要禁用swap,你可以通过如下命令来实现:

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

sudo swapoff -a

MASTER配置host

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 的链

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仓库:

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

然后安装kubelet,kubeadm,和kubectl:

sudo yum install -y kubelet kubeadm kubectl

sudo systemctl enable --now kubelet

containerd配置

sudo yum install containerd       #安装服务器

sudo systemctl start containerd    #启动服务器

sudo systemctl enable containerd   #开机启动服务器

sudo systemctl status containerd   #查看服务状态

sudo systemctl restart containerd   #重启服务器

sudo systemctl daemon-reload        #重新加载 Systemd 守护进程的配置文件

#如果报错kubeadm init无法连接containerd,请执行
rm -rf /etc/containerd/config.toml
#然后执行
sudo systemctl restart containerd

初始化集群

kubeadm init \
--apiserver-advertise-address=10.10.10.100 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16


#--apiserver-advertise-address=10.10.10.100 \                 主节点
#--image-repository registry.aliyuncs.com/google_containers \ 源文件
#--service-cidr=10.96.0.0/12 \                                serviceIP范围
#--pod-network-cidr=10.244.0.0/16                             网络插件控制范围

在运行 **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 集群的关键。

将export KUBECONFIG=/etc/kubernetes/admin.conf配置进.bashrc 避免每次开机都要配置

部署网络插件

https://kubernetes.io/docs/concepts/cluster-administration/addons/

网络插件

#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插件


kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

WEAVE-SCOPE

kubectl apply -f https://github.com/weaveworks/scope/releases/download/v1.13.2/k8s-scope.yaml

https://zhuanlan.zhihu.com/p/586486482 WEAVE_SCOPE_YAML

[!note]+ 插件删除

  1. 首先,你需要彻底删除原有的网络插件。对于大部分网络插件,你可以运行 **kubectl delete -f** 命令并指向原插件的 YAML 文件,例如 **kubectl delete -f calico.yaml**。然而,这不一定会删除所有相关资源,你可能还需要手动删除一些遗留的网络接口、配置或数据。
  2. 其次,你需要确保所有的节点都清理了原有网络插件的遗留,并且已经就绪。这可能需要重启节点,或者运行一些特定的清理脚本。
  3. 最后,你可以部署新的网络插件。这通常是通过运行 **kubectl apply -f** 命令并指向新插件的 YAML 文件,例如 **kubectl apply -f weave.yaml**

这个过程可能会引起集群的服务中断,因为在新的网络插件部署并开始工作之前,Pod 之间可能无法进行网络通信。所以,在生产环境中,这种操作应该在维护窗口内进行,并且需要提前通知所有的用户和利益相关者。

测试集群


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://www.cnblogs.com/chen2ha/p/17086962.html 注意要点可以先下载配置文件并配置nodeport ,如果出现必须https访问可以输入thisisunsafe

#安装
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]]

只需要通过IP:nodeprot 就可以登陆

Service Account,ClusterRoleBinding,long-lived配置合集

[[IMG-20260516155648758.yaml]]

Creating a Service Account

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

Creating a ClusterRoleBinding

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

kubectl -n kubernetes-dashboard create token admin-user

Getting a long-lived Bearer Token for ServiceAccount

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
kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d

Clean up and next steps

kubectl -n kubernetes-dashboard delete serviceaccount admin-user
kubectl -n kubernetes-dashboard delete clusterrolebinding admin-user