服务器 操作系统:CentOS 7.9 NAT
-
192.168.1.156 4核 20G master
-
192.168.1.110 1核 8G node01
-
192.168.1.111 1核 8G node02
-
192.168.1.112 1核 8G node03
环境准备
-
关闭防火墙
####关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && iptables -F
-
关闭selinux
####关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0
注: selinux:安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux是一种采用安全架构的Linux系统,由美国国家安全局(NSA)利用Linux安全模块(LSM)开发而成。它的作用是审核每一个程序的行为,有任何异常之处它都会立即警告用户,从而避免我们被恶意软件、木马、黑客等侵害。SELinux的工作原理类似防火墙,就是设置一系列的规则,这些规则可以精细到每个软件。
-
关闭swap分区
####临时关闭
swapoff -a
####永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
-
修改主机以及各个节点的hosts文件(/etc/hosts)
####设置主机名
[root@master]hostnamectl set-hostname master
[root@node01]hostnamectl set-hostname node01
[root@node02]hostnamectl set-hostname node02
[root@node03]hostnamectl set-hostname node03
####hosts文件
192.168.1.156 master master
192.168.1.110 node01 node1
192.168.1.111 node02 node2
192.168.1.112 node03 node3
-
修改内核参数
####添加K8S内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
####查看参数
sysctl --system
-
加载ip_vs内核模块
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4
####设置开机自启
cat > /etc/modules-load.d/ip_vs.conf << EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
EOF
安装docker
1.具体过程不赘述,没什么难点,可以参考脚本
echo "#判断是否安装docker"
if [ -z "$(which docker)" ]; then
echo "===========================安装docker==========================="
echo "#安装docker "
echo "# 解压installData文件夹下的tgz文件"
tar -zxvf $BASEDIR/installData/docker-20.10.15.tgz -C $BASEDIR/installData/
cp $BASEDIR/installData/docker/* /usr/bin/
echo "# 复制docker.service 文件到 "
cp $BASEDIR/conf/docker/docker.service /etc/systemd/system/
mkdir /etc/docker/
cp $BASEDIR/conf/docker/daemon.json /etc/docker/
chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
chmod +x /etc/docker/daemon.json
systemctl daemon-reload #重载unit配置文件
systemctl start docker #启动Docker
systemctl enable docker.service #设置开机自启
fi
安装Kubeadm、Kubectl、Kubelet
-
配置yum源(阿里源)
####修改镜像源
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=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
-
安装Kubeadm、Kubectl、Kubelet
####安装kube
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
####设置开机自启
systemctl enable kubelet
部署Master节点
-
master节点初始化
kubeadm init \
--kubernetes-version 1.23.0 \ ####指定版本
--apiserver-advertise-address=192.168.1.156 \ ####通告给其他组件的ip,一般为master节点的ip
--service-cidr=10.96.0.0/16 \ ####指定service网络,不能和node网络冲突
--pod-network-cidr=10.245.0.0/16 \ ####指定pod网络,不能和node网络,service网络冲突
--image-repository registry.aliyuncs.com/google_containers #####指定镜像源
-
配置kubectl
####执行初始化成功后输出的三条命令
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
-
查看节点信息,等待节点加入
kubectl get nodes
node节点加入集群
-
node01节点加入集群
kubeadm join 192.168.68.106:6443 --token 1quyaw.xa7yel3xla129kfw \
--discovery-token-ca-cert-hash sha256:470410e1180b119ebe8ee3ae2842e7a4a852e590896306ec0dab26b168d99197
-
node02节点同上
-
master节点上查看集群节点
kubectl get nodes
STATUS为NotReady,是因为集群中缺少第三方网络插件所导致,常见网络插件有两种flannel与calico,通过wget命令下载yaml文件
安装网络插件
-
从官网下载flannel的yaml文件
######flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#####calico
wget https://docs.projectcalico.org/manifests/calico.yaml
flannel
更改文件128行网络配置,和 pod-network-cidr保持一致
####执行yaml文件
kubectl apply -f kube-flannel.yaml
查看未启动插件日志,缺少那个镜像手动拉取至各个节点
####查看日志
kubectl describe pod <pod-name> -n <namespace>
手动拉取镜像网站渡渡鸟镜像同步站 (aityp.com)
Calico
删除Flannel
kubectl delete -f kube-flannel.yaml
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
mv /var/lib/cni /var/lib/cni.bak
mv /etc/cni/net.d /etc/cni/net.d.bak
####清除网络重启kube
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
systemctl restart kubelet
####执行calico.yaml文件
kubectl apply -f calico.yaml
查看未启动插件日志,缺少那个镜像手动拉取至各个节点
kubectl describe pod <pod-name> -n <namespace>
kubernetes dashboard部署
下载yaml文件并安装
####下载dashboard的recommended.yaml文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
####编辑recommended.yaml
vim recommended.yaml
####在端口添加
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30443 ####添加
selector:
k8s-app: kubernetes-dashboard
type: NodePort ###添加
#### 然后k8s的主节点当中去执行:
kubectl apply -f recommended.yaml
#### 监控仪表盘是否安装完成
watch kubectl get all -o wide -n kubernetes-dashboard
#### 访问 Dashboard 用户界面
#### 查看 kubernetes-dashboard Service暴露的端口:
kubectl get svc -n kubernetes-dashboard -o wide
浏览器访问dashboard
在浏览器访问:https://192.168.1.156:30443/
创建用户admin-user.yaml
admin-user.yaml
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 # 默认内置的 ClusterRole, 超级用户(Super-User)角色(cluster-admin)
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
创建用户
kubectl apply -f admin-user.yml
创建临时token
kubectl -n kubernetes-dashboard create token admin-user
kubernetes-dashboard 实现https切换http访问以及免token登录
-
在recommended.yaml增加80端口,
####在端口添加
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30443
name: https ####添加
- port: 80 ####添加
targetPort: 9090 ####添加
name: http ####添加
nodePort: 32001 ####添加
selector:
k8s-app: kubernetes-dashboard
type: NodePort
-
修改clusterrolebinding
####默认绑定kubernetes-dashboard权限太少,这里换成比较高的cluster-admin
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin #### 主要修改了这里
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kubernetes-dashboard
-
修改deployment 内容 修改探针检测
####后面要修改dashboard 的启动参数,这里不改的话,活性检测会失败,导致 pod 会不断重启
livenessProbe:
httpGet:
scheme: HTTP
path: /
port: 9090 ####修改
-
修改拉取镜像策略
####官方 yaml 里面默认配置的是 Always
sed -i 's/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g' recommended.yaml
-
修改容器端口
####增加9090端口
ports:
- containerPort: 8443
protocol: TCP
- containerPort: 9090 ####添加
protocol: TCP ####添加
-
关闭token登录
####注释--auto-generate-certificates 参数
args:
# - --auto-generate-certificates
- --namespace=kubernetes-dashboard
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
# to it. Uncomment only if the default does not work.
# - --apiserver-host=http://my-address:port
kuboard安装
在各个节点拉取镜像 eipwork/kuboard:latest
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eipwork/kuboard:v3.5.2.7
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eipwork/kuboard:v3.5.2.7 eipwork/kuboard:latest
在master节点上kuboard.yaml修改
spec:
nodeName: node01 ####添加
nodeName: node02 ####添加
nodeName: node03 ####添加
containers:
- name: kuboard
image: eipwork/kuboard:latest
imagePullPolicy: IfNotPresent
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
####执行yaml
kubectl apply -f kuboard.yaml
####查看pod运行情况
kubectl get pod -n kube-system
####查看kubernetes的运行端口
kubectl get svc -n kube-system
初始Kuboard账号密码登录
admin Kuboard123
获取导入集群token
echo -e "\033[31m$(kubectl -n kuboard get secret $(kubectl -n kuboard get secret kuboard-admin-token | grep kuboard-admin-token | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)\033[0m"
安装metrics-server对集群状态进行监控
手动拉取所需镜像
#####拉取metrics-server至各个节点
docker pull swr.cn-east-2.myhuaweicloud.com/kuboard-dependency/metrics-server:v0.6.2
####检查集群状态
kubectl get pod <pod-name> -n <namespace>
将镜像部署至K8S集群
-
创建命名空间
kubectl create namespace
标签:kubectl,kubernetes,部署,####,yaml,集群,Kubenetes,docker,dashboard
From: https://blog.csdn.net/qq_53567504/article/details/140814207