Kubenetes集群部署操作

服务器 操作系统: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

环境准备

  1. 关闭防火墙

####关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && iptables -F
  1. 关闭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的工作原理类似防火墙,就是设置一系列的规则,这些规则可以精细到每个软件。

  1. 关闭swap分区

####临时关闭
swapoff -a
####永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
  1. 修改主机以及各个节点的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
  1. 修改内核参数

####添加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
  1. 加载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

  1. 配置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
  1. 安装Kubeadm、Kubectl、Kubelet

####安装kube
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
####设置开机自启
systemctl enable kubelet

部署Master节点

  1. 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    #####指定镜像源

img

  1. 配置kubectl

####执行初始化成功后输出的三条命令
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
  1. 查看节点信息,等待节点加入

kubectl get nodes

node节点加入集群

  1. node01节点加入集群

kubeadm join 192.168.68.106:6443 --token 1quyaw.xa7yel3xla129kfw \
    --discovery-token-ca-cert-hash sha256:470410e1180b119ebe8ee3ae2842e7a4a852e590896306ec0dab26b168d99197
  1. node02节点同上

  2. master节点上查看集群节点

kubectl get nodes

STATUS为NotReady,是因为集群中缺少第三方网络插件所导致,常见网络插件有两种flannel与calico,通过wget命令下载yaml文件

安装网络插件

  1. 从官网下载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登录

  1. 在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   
  1. 修改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
  1. 修改deployment 内容 修改探针检测

####后面要修改dashboard 的启动参数,这里不改的话,活性检测会失败,导致 pod 会不断重启
livenessProbe:
  httpGet:
    scheme: HTTP
    path: /
    port: 9090     ####修改
  1. 修改拉取镜像策略

####官方 yaml 里面默认配置的是 Always
sed -i 's/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g' recommended.yaml
  1. 修改容器端口

####增加9090端口
ports:
  - containerPort: 8443
    protocol: TCP
  - containerPort: 9090   ####添加
    protocol: TCP    ####添加
  1. 关闭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集群

  1. 创建命名空间

kubectl create namespace 

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来之星姜大帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值