安装k8s前要先安装docker——K8s 本身不直接管容器,得靠一个 “容器运行时” 来干活,以前最主流的就是 Docker,所以大家习惯了先装 Docker 再搭 K8s。

yum install -y yum-utils

yum-utils 提供了 yum-config-manager 命令,用于添加、管理 YUM 软件源,-y 参数表示安装时自动确认所有交互。

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

添加阿里云提供的 Docker 官方 YUM 镜像源,后续安装 Docker 时会从这个源下载,比国外源速度更快、更稳定。

yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6

安装指定版本 Docker

systemctl enable docker --now

开机自启

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://ccr.ccs.tencentyun.com",
    "https://hub.xdark.top",
    "https://dhub.kubesre.xyz",
    "https://docker.kejilion.pro",
    "https://docker.xuanyuan.me",
    "https://docker.hlmirror.com",
    "https://run-docker.cn",
    "https://docker.sunzishaokao.com",
    "https://image.cloudlayer.icu",
    "https://docker.tbedu.top",
    "https://hub.crdz.gq",
    "https://docker.melikeme.cn",
    "https://xuanyuan.cloud"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

以上的镜像源是为了docker拉取nginx,mysql,redis等配置的镜像源

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

关闭selinux

sudo setenforce 0

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

关闭swap分区

swapoff -a

sed -ri 's/.*swap.*/#&/' /etc/fstab

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node
设置主机名

cat >> /etc/hosts << EOF
192.168.255.210 k8s-master
192.168.255.201 k8s-node1
EOF

加载 br_netfilter 内核模块——br_netfilter 是 Linux 内核中负责桥接流量过滤的模块,它能让 iptables/ip6tables 对网桥(bridge)设备上的数据包进行过滤和转发,是 K8s 网络插件(如 Calico、Flannel)正常工作的基础。

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

配置桥接流量的 iptables 规则——如果不开启这些参数,桥接的流量会绕过 iptables,导致网络策略、服务转发失效,集群内部无法正常通信。

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

应用sysctl配置

sudo sysctl --system

安装kubelet kubeadm kubectl

配置k8s源地址

cat <<EOF | sudo tee /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

安装

yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9

开机自启

sudo systemctl enable --now kubelet

检测kubelet是否成功运行

systemctl status kubelet

不成功因为缺少了文件执行下面命令初始化后就行了

master节点

创建并写入 images.sh 脚本——把镜像拉取下来
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

给脚本添加执行权限并运行
chmod +x ./images.sh && ./images.sh

kubeadm init \
--apiserver-advertise-address=192.168.255.210 \

#注意改成自己的ip
--control-plane-endpoint=k8s-master \

#改成自己的主机名
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

# 如果初始化失败,重置kubeadm
kubeadm reset

# 清理相关配置文件
rm -rf /etc/cni/net.d $HOME/.kube/config

# 清理 iptables 规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# 恢复 iptables 默认策略
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

检查有没有该环境变量

[root@master yum.repos.d]# echo $KUBECONFIG

没有则输入以下命令执行

export KUBECONFIG=/etc/kubernetes/admin.conf

查看加入master命令

kubeadm token create --print-join-command

安装网络插件calico——多半错误要么是下载的文件不全缺失了,要么版本不对

1.curl -LO https://docs.projectcalico.org/v3.19/manifests/calico.yaml

2.curl -C - -LO --retry 20 --retry-delay 2 --connect-timeout 10 https://docs.projectcalico.org/v3.19/manifests/calico.yaml

3.curl -C - -LO https://docs.projectcalico.org/v3.19/manifests/calico.yaml

kubectl apply -f calico.yaml

node节点加入集群

然后在master节点上输入

kubectl get node

得到图片结果ready即为成功

#图形化界面dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

kubectl get pod -A       #查看是否两个都runnning

kubectl delete pod ***    #如果没启动成功试着重启

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard      #修改nodeport通过浏览器访问

kubectl get svc -n kubernetes-dashboard   #查看端口用来浏览器访问

#用https://ip:端口号     访问(访问不了的话点空白处输thisisunsafe)即可

登陆方式token

1.  kubectl -n kubernetes-dashboard describe sa kubernetes-dashboard | grep Tokens

2.  kubectl -n kubernetes-dashboard describe secret kubernetes-dashboard-token-cfxbm

加租部分是1查出来的token

3.再把查出来的token输入就可以登录k8s了

#但这个没有权限,接下来设置新用户token登录

vi sa-dashboard-admin.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: ljh
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-oldboyedu
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: ljh
  namespace: kubernetes-dashboard

#apply

kubectl -n kubernetes-dashboard describe sa ljh | grep Tokens   

#都是kubernetes-dashboard的namespace

kubectl secret describe ljh-token-wglw6

#再用新的token登录即可

更多推荐