环境准备
- 卸载podman,centos默认安装了podman容器(不管有没有,执行下总没错),可能与docker存在冲突
sudo yum remove podman
- 关闭交换分区
sudo swapoff -a #临时关闭
sudo sed -i 's/.*swap.*/#&/' /etc/fstab #永久关闭交换区
- 禁用selinux
setenforce 0 #临时关闭
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #永久关闭
- 关闭防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
k8s安装
- 配置系统基本安装源(注意centos8阿里云的镜像已经没有了,需要使用下面的)
由于centos-8 镜像已经移除了,换成这个 看这个文章 更换镜像源 - 添加K8s安装源
vim /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
- 安装docker(如果你想安装最新版本或者1.24.0以上,忽略此步骤,跳到第4步)
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
使用docker 加速
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors" : ["https://mj9kvemk.mirror.aliyuncs.com"]
}
修改docker驱动
默认驱动是system,修改为systemd
vim /etc/docker/daemon.json
{
"registry-mirrors" : ["https://mj9kvemk.mirror.aliyuncs.com"],
"exec-opts":["native.cgroupdriver=systemd"]
}
systemctl daemon-reload
systemctl restart docker
- 由于k8s,1.24及以上版本不再使用docker,我们安装container
#下载tar.gz包
wget https://d.frps.cn/file/kubernetes/containerd/cri-containerd-cni-1.6.4-linux-amd64.tar.gz
# 上面这个地址,我下载的时候快点,也可以使用github的地址
wget https://github.com/containerd/containerd/releases/download/v1.6.4/cri-containerd-cni-1.6.4-linux-amd64.tar.gz
#我们直接让它给我们对应的目录给替换掉
tar zxvf cri-containerd-cni-1.6.4-linux-amd64.tar.gz -C /
#创建配置文件目录
mkdir /etc/containerd -p
#生成默认配置文件
containerd config default > /etc/containerd/config.toml
#默认情况下k8s.gcr.io无法访问,所以使用我提供的阿里云镜像仓库地址即可
sed -i 's/k8s.gcr.io/registry.cn-beijing.aliyuncs.com\/abcdocker/' /etc/containerd/config.toml
# 配置systemd作为容器的cgroup driver
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.toml
# 启动
systemctl enable containerd --now
# 查看启动状态
systemctl status containerd
# 查看版本号
ctr version
container 安装完毕
5. 安装kubectl、kubelet、kubeadm(指定版本,截止7月4号,最新版本为1.24.2,移除了docker,我们可制定1.23.0版本安装),大家根据需要执行决定
# 安装最新版 使用命令(需要使用 containerd)
sudo yum install -y kubectl kubelet kubeadm
# 安装指定版本,使用命令(需要使用 docker)
sudo yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
sudo systemctl enable kubelet
sudo systemctl start kubelet
查看版本
kubeadm version
kubectl version --client
kubelet --version
- 初始化kubernetes集群
下面 kubernetes-version的版本v1.23.0,根据上面kubeadm version,属性GitVersion,中的版本号自行修改
kubeadm init --apiserver-advertise-address=0.0.0.0 \
--apiserver-cert-extra-sans=127.0.0.1 \
--image-repository=registry.aliyuncs.com/google_containers \
--ignore-preflight-errors=all \
--kubernetes-version=v1.23.0 \
--service-cidr=10.10.0.0/16 \
--pod-network-cidr=10.18.0.0/16
- 部署
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 node
kubectl get pod --all-namespaces
- 安装calico网络
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 安装kubernetes-dashboard,也就是web控制面板
下载recommended.yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml
注意:在文件中搜索k8s-app: kubernetes-dashboard,修改当前节点的信息
# 修改文件
vim recommended.yaml
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: 30000 #添加这行
selector:
k8s-app: kubernetes-dashboard
- 创建pod
kubectl create -f recommended.yaml
kubectl get svc -n kubernetes-dashboard
- 查看是否正确启动 kubernetes-dashboard
kubectl get pod --all-namespaces
如果kubernetes-dashboard 的status一直在creatingcontainer或者其他状态,运行下面的命令查看当前pod的日志
kubectl describe pod dashboard-metrics-scraper-c45b7869d-2dhc4 --namespace=kubernetes-dashboard
我的问题是,一直pulling image kubernetesui/metrics-scraper:v1.0.7
然后我删除了之前pod
运行命令删除
kubectl delete -f recommended.yaml
使用docker 拉取镜像或者使用crictl,手动拉取
docker pull kubernetesui/metrics-scraper:v1.0.7
crictl pull kubernetesui/metrics-scraper:v1.0.7
如果一直处于pending状态,通过describe 命令查看,我的问题如下(在安装1.24.2的时候,出现)
Warning FailedScheduling 101s (x5 over 22m) default-scheduler 0/1 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.
执行下面命令,再等待几分钟执行 kubectl get pod --all-namespaces,查看是否都处于running状态
允许主节点参与调度
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/master-
使用web管理
- 获取token(1.23.0 版本以下方式获取token)
# 创建token
kubectl create sa dashboard-admin -n kube-system
# 授权Token访问权限
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取token
ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
echo ${DASHBOARD_LOGIN_TOKEN}
- 获取token 1.24.0及以上版本,使用以下方式获取token
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl -n kube-system get serviceaccounts |grep dashboard
# 输出:dashboard-admin 0 21m
# 创建token
# --duration 86400s 指定token过期时间
kubectl -n kube-system create token dashboard-admin --duration 3153600000s
- https://ip:30000/#/login 使用上面的token登录(必须一https的方式访问)
- 也可以使用config文件登录
vim /root/.kube/config
将上面生产的token放到文件最后一行
温馨提示:token前面需要和上面client代码缩进,注意空4个字符。token:后面有一个空格