# kubernetes集群(centos)
centos7安装kubernetes集群
- 参考博客 https://blog.csdn.net/mo_sss/article/details/135749235
172.17.110.248 root Aw&bfBmdTM42^ra8@=c&8 集群 172.17.110.249 172.17.110.250(172.17.110.241) 172.17.110.251
备用 172.17.110.241 172.17.110.242 172.17.110.243
# 环境准备
服务器配置
节点 ip地址 hostname主机名 运行内存mem 内存 控制台节点master 172.17.110.249 iZ2zed9mcoaawq0yri5sieZ 8G 16G 工作节点worker1 172.17.110.250 iZ2zed9mcoaawq0yri5sifZ 8G 16G 工作节点worker2 172.17.110.251 iZ2zed9mcoaawq0yri5sigZ 8G 16G 软件配置
| 软件 | 版本 | 作用 |
|---|---|---|
| Docker | 20.10.24 | 作为k8s的容器运行时环境 |
| Kubernetes | 1.23.0 | 包含了kubectl、kubeadm、kubelet,是k8s所需的组件 |
| Flannel | 0.24.0 | 网络组件,构建pod之间建立连接互通 |
涉及开放的端口 master 6443,10250,10251,10252 worker1 10250
主机名与ip绑定
cat >> /etc/hosts <<EOF
172.17.110.249 iZ2zed9mcoaawq0yri5sieZ
172.17.110.250 iZ2zed9mcoaawq0yri5sifZ
172.17.110.251 iZ2zed9mcoaawq0yri5sigZ
EOF
# 安装K8S(集群的3台机器都要执行)
添加kubernetes的镜像仓库
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 EOF查看已添加的内容
cat /etc/yum.repos.d/kubernetes.repo更新yum资源包
yum makecache安装k8s组件
#指定版本安装 yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0 或 #默认安装 sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes设置开机自启
systemctl enable --now kubelet查看kubelet状态
systemctl status kubelet查看kubectl版本
kubectl version查看kubeadm版本
yum info kubeadm配置自动补全命令(可跳过)
yum install bash-completion -y设置kubectl命令补全,下次login生效
kubectl completion bash >/etc/bash_completion.d/kubectl设置kubeadm命令补全,下次login生效
kubeadm completion bash > /etc/bash_completion.d/kubeadm
# 卸载k8s
#停止Kubernetes相关服务
sudo systemctl stop kubelet
#Docker作为容器运行时,也需要停止Docker服务
sudo systemctl stop docker
#卸载kubelet,kubeadm和kubectl
sudo yum remove kubeadm kubectl kubelet
#删除数据文件
sudo rm -rf /etc/kubernetes
sudo rm -rf /var/lib/kubelet
#确认删除状态(显示“inactive (dead)”)
sudo systemctl status kubelet
# 初始化master节点(只在master节点执行)
查看镜像
#指定版本 kubeadm config images list --kubernetes-version v1.23.0 或 #不指定版本 kubeadm config images list查看阿里云镜像仓库地址中的镜像列表
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers拉取镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers初始化操作
kubeadm init \ --apiserver-advertise-address=172.17.110.249 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.23.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --ignore-preflight-errors=all#在master节点执行(--ttl 8760h 一年有效) kubeadm token create --ttl 8760h --print-join-command #查看kubeadm所有token kubeadm token list#错误 The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz #是否配置cgroup cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"] } EOF #重启docker systemctl restart docker
初始化成功复制kubeadm join
kubeadm join 172.17.110.249:6443 --token ggrsq8.eickidjyxva09p4a \ --discovery-token-ca-cert-hash sha256:5c4631fd88c5c6ae845b231d56b953992fb20b52c8e65769be6c3441f0d2d1e7重置kubeadm(如初始化失败)
kubeadm reset
sudo rm -fr ~/.kube/ /etc/kubernetes/* var/lib/etcd/*
# 搭建集群(master节点)
# 1. 配置.kube
创建kube文件
mkdir -p $HOME/.kube
将admin.conf文件复制到kube文件夹下的config
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
修改文件权限,从文件所有者修改为文件所有者所在的组中的其他用户,user–>group
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 2. 配置.bash_profile
- 配置.bash_profile,追加内容到最下边
vim /root/.bash_profile
export KUBECONFIG=/etc/kubernetes/admin.conf
alias k=kubectl
source <(kubectl completion bash)

- 激活.bash_profile
source /root/.bash_profile
# 3. 配置网络
安装wget
yum install -y wget下载kube-flannel.yml
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml网段确认,net-config.json的网段值与执行kubeadm init 输入的网段一致
cat kube-flannel.yml net-conf.json: | { "Network": "10.244.0.0/16", "Backend"": { "Type": "vxlan" } }部署flannel
kubectl apply -f kube-flannel.yml kubectl delete -f kube-flannel.yml
查看kube-flannel服务状态 确保flannel对应的pod状态为Running才可正常使用 查看所有pod状态,其中包含kube-flannel
kubectl get pod --all-namespaces查看系统容器状态
kubectl get pod -n kube-system主节点状态获取
kubectl get cs查看集群中的节点信息
kubectl get nodes
# 节点加入集群(worker节点)
# 1.加入集群命令
获取主节点上获取的join命令,在从节点执行
kubeadm join 172.17.110.249:6443 --token ggrsq8.eickidjyxva09p4a \
--discovery-token-ca-cert-hash sha256:5c4631fd88c5c6ae845b231d56b953992fb20b52c8e65769be6c3441f0d2d1e7

master节点查看集群
kubectl get nodes
如果token失效,需在master节点重新获取
#在master节点执行(--ttl 8760h 一年有效)
kubeadm token create --ttl 8760h --print-join-command
# 从节点中使用kubectl命令
- 从节点执行kubectl get nodes
从节点无法执行,因为在主节点中生成了admin.conf文件,从节点中没有,此文件授权kubectl命令的使用,需要将其复制到从节点并配置环境变量使之生效即可
查看admin.conf文件(在主节点)
ls /etc/kubernetes/复制文件(在主节点)
如无法通过scp复制,可选择sz,rz方式
sudo scp /etc/kubernetes/admin.conf root@iZ2zed9mcoaawq0yri5sifZ:/etc/kubernetes/ sudo scp /etc/kubernetes/admin.conf root@iZ2zed9mcoaawq0yri5sigZ:/etc/kubernetes/从节点查看(从节点)
ls /etc/kubernetes配置环境变量(从节点)
sudo vim /etc/profile export KUBECONFIG=/etc/kubernetes/admin.conf #使环境变量生效 source /etc/profile
从节点中使用kubectl命令查看集群节点
kubectl get nodes
# 删除从节点
# 1. 释放节点(主节点)
#以从节点iZ2zed9mcoaawq0yri5sigz为例
kubectl drain iz2zed9mcoaawq0yri5sigz --delete-local-data --force --ignore-daemonsets
# 2. 删除节点(主节点)
#以从节点iZ2zed9mcoaawq0yri5sigZ为例
kubectl delete node iz2zed9mcoaawq0yri5sigz
# 3. 重置配置(从节点)
kubeadm reset
# 4. 删除文件(从节点)
#删除文件
sudo rm -rf /etc/cni/net.d/
sudo rm -rf /root/.kube/config
kubeadm join 172.17.110.249:6443 --token 6sbi77.y55tl41ohi02zw3x --discovery-token-ca-cert-hash sha256:bf094a990545eb845a3fd871b8507db3d0681ee5eeb466aeb22400c53f99068d
#删除CNI(如需)
ifconfig cni0 down
ip link delete cni0
#删除fannel(如需)
ifconfig flannel.1 down
ip link delete flannel.1
# Dashboard配置(主节点)
使用dashboard作为可视化界面管理k8s集群
# 1. 下载并安装dashboard
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml
#删除
kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# 2. 添加用户
vim dash-user.yml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
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
#运行dash-user
kubectl apply -f dash-user.yml
kubectl delete -f dash-user.yml
kubectl delete svc kubernetes-dashboard --namespace=kubernetes-dashboard
kubectl get pod --namespace=kubernetes-dashboard
kubectl delete pod dashboard-metrics-scraper-6f669b9c9b-4zwls --namespace=kubernetes-dashboard
# 3. 获取token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
#获取的token值
eyJhbGciOiJSUzI1NiIsImtpZCI6Im9lZVRqSG5SVjk2cE5ocVdkeHlVbEl0Ulhld08yMERWcVQwRXVySEV5d0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXBtcm40Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIzNGUxMDM5YS1jNTc5LTQ2ODUtYjg2OS1mNWNiMTk2ZjE5ZGQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.f68jV_mfBP7CwpuOk1cfJB_Ee5vUkd5KprQIcMGWOYYs1tRNJ5ffUGG7gSBmdLke04YYuPMefQbuOrqpBQbtJOCI47B2tQmlf_giTaJY1aJdFc2PqaDGS3M-DDOJJ40AU0eju-bjIQcSyAdg88LG_kxwe0KuEwiSYNxZXBHhsup7Tg_r4xMY01j7JMzCf2RmZEADoW3EmqawjCgG2aZnuKpkbBElygD0r2GtGLDurCF-6q7n_EtXcJsCxgE6g-YtXZueNhGdsHUY8HidUxYAeKiugr7wNlMvUOX4yrG0qa6WXHLr-wiylpRrDtjJvhW2dWy1fKl2WrVDdD3-UmumJQ

# 4. 访问dashboard(需要跳板机,不适用当前服务器环境)
- 查看dashboard服务的端口
kubectl get svc -n kubernetes-dashboard
或
kubectl get service kubernetes-dashboard -n kubernetes-dashboard
# 修改type的值
修改service的type改为NodePort,暴露到外部进行访问
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard# 再次查看端口

# IP获取
查看服务名对应的ip
kubectl get pods -n kubernetes-dashboard -o wide | grep kubernetes-dashboard
# 访问dashboard
https://172.17.110.250:30160

将token复制粘贴进去

# Kuboard(k8s后台系统)
#启动
kubectl apply -f kuboard-v3.yaml
#修改镜像地址
meteorplan/etcd-host:3.4.16-2
meteorplan/eipwork-kuboard:v3
#停止
kubectl delete -f kuboard-v3.yaml
#Kuboard访问
http://172.17.110.249:30080/
用户名:admin
密码:Kuboard123
