1、k8s装置

一、根底概念

1、kubernetes,简称 K8s,是用8替代8个字符“ubernete”而成的缩写。是一个开源的,用于办理云平台中多
个主机上的容器化的运用,Kubernetes 的目标是让布置容器化的 运用简略而且高效(powerful),Kubernetes
供给了运用布置,规划,更新,保护的一种机制。
​ 2、kubeadm是官方社区推出的一个用于快速布置kubernetes集群的东西,这个东西能经过两条指令完结一个
kubernetes集群的布置。
(1)创立一个 Master 节点
    kubeadm init2)将一个 Node 节点参加到当前集群中
    kubeadm join <Master节点的IP和端口>

二、硬件要求

在开端之前,布置Kubernetes集群机器需求满足以下几个条件:
(1)一台或多台机器,操作体系 CentOS7.x-86_x64
(2)硬件装备:3GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
(3)能够拜访外网,需求拉取镜像,假如服务器不能上网,需求提早下载镜像并导入节点
(4)制止swap分区

三、环境预备与规划

1、集群规划
node1   192.168.215.140   (master)
node2   192.168.215.141   (slave) 
node3   192.168.215.142   (slave)
2、必要环境预备(3台都履行)
(1) 都封闭防火墙
systemctl stop firewalld
systemctl disable firewalld
(2) 都封闭selinux
setenforce 0  # 暂时
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
(3) 都封闭swap
swapoff -a  # 暂时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
(4) 依据规划设置主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
(5) 只在master140增加hosts
cat >> /etc/hosts << EOF
192.168.215.140 node1
192.168.215.141 node2
192.168.215.142 node3
EOF
(6) 三台服务器,将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
(7) sysctl --system  # 生效
(8) 时刻同步
yum install ntpdate -y
ntpdate time.windows.com
(9) 重启一切服务器

四、装置docker并增加yum源

Kubernetes默许CRI(容器运转时)为Docker,因此先装置Docker。

4.1 装置docker

3台都需求装置docker
1、运用wget指令下载docker-ce.repo
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo  
2、装置docker18.06.1版别
    yum -y install docker-ce-18.06.1.ce-3.el7
3、设置开机自启,并发动docker
    systemctl enable docker && systemctl start docker
4、查看docker版别
    docker --version

4.2 设置docker镜像库房地址

设置docker镜像库房地址为:阿里巴巴的地址,加速镜像下载

3台都需求设置库房地址
1、创立文件夹
    sudo mkdir -p /etc/docker
2、替换镜像库房地址
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://p4e9di9t.mirror.aliyuncs.com"]
    }
    EOF
3、重启docker
    systemctl daemon-reload
    systemctl restart docker

4.3 设置k8s的YUM源

3台都履行
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
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

五、装置kubeadm,kubelet和kubectl

1、装置指定版别的1.18,避免兼容性问题
    yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
2、设置开机自启
    systemctl enable kubelet

使用kubeadm快速部署一个K8s集群、并安装KubeSphere
使用kubeadm快速部署一个K8s集群、并安装KubeSphere

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

六、布置K8s Master

6.1 kubeadm初始化并下载镜像

1、在192.168.215.140(Master)履行。
2、service-cidr 和 pod-network-cidr 只要是和当前网段不抵触的ip就能够。
3、因为默许拉取镜像地址k8s.gcr.io国内无法拜访,这里指定阿里云镜像库房地址。
kubeadm init \
  --apiserver-advertise-address=192.168.215.140 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

6.2 仿制装备文件,并授权

在 140 master上面继续履行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

6.3 查看节点

kubectl get nodes
发现只有master一个节点,而且状况是 “未预备”

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

七、布置K8s Slave

把从节点参加到master当中去,然后组成一个集群,所以接下来的操作根本都是在141/142 从节点上面履行的。

7.1 master生成token

140 master 节点上面履行如下指令,生成token,然后让其他节点参加进来,默许24h有效
kubeadm token create --print-join-command

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

7.2 从节点参加master

仿制master上面生成的指令,在从节点141/142上面别离履行:
kubeadm join 192.168.215.140:6443 --token bycusu.59ms8jd3eq24762t     --discovery-token-ca-cert-hash sha256:27beb79651247a57b6272f27f6e2c6d64085a2130b0103387e4cf0cd2e85e167 

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

7.3 再次查看节点

kubectl get nodes
在master上面履行该指令,发现节点数量增加了2

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

八、布置CNI网络插件

 1、在master上面履行该指令,需求等待5-10分钟,若失败,多履行几次
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml   
 2、查看详细体系状况 ,需求每个是Running
    kubectl get pods -n kube-system 
 3、查看节点状况,每个node都是reaady
     kubectl get nodes
【注】当23都是running与ready状况表示cni网络插件现已装置完结

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

九、测验K8s集群

在Kubernetes集群中创立一个pod,验证是否正常运转:master
 1、kubectl create deployment nginx --image=nginx 
 2、kubectl get pod,svc   查看状况是否为running,然后履行第3步露出端口
 3、kubectl expose deployment nginx --port=80 --type=NodePort
 4、kubectl get pod,svc   查看映射端口是多少
   拜访地址:http://192.168.215.140:32491

使用kubeadm快速部署一个K8s集群、并安装KubeSphere
使用kubeadm快速部署一个K8s集群、并安装KubeSphere

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

十、卸载k8s

kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum clean all
yum remove kube*

2、nfs默许存储类装置

kubernetes集群装备默许存储类(nfs)

  • 查看Kubernetes集群中的默许存储类
kubectl get storageclass

装置nfs服务端

  • 找一台新的服务器,作为nfs服务端,然后进行 nfs的装置 【服务器:172.16.11.17】
  • 装置nfs
yum install -y nfs-utils
  • 创立存放数据的目录
mkdir -p /data/k8s
  • 设置挂载路径
# 翻开文件
vim /etc/exports
# 增加如下内容
/data/k8s *(rw,no_root_squash)

node节点上装置

  • 在k8s集群需求布置运用的node节点装置nfs
yum install -y nfs-utils

发动nfs

  • node节点上装备完结后,到nfs服务器发动nfs
systemctl start nfs

装备StorageClass

  • 运用StorageClass,需求装置对应的主动装备程序,比如上面咱们运用的是nfs,那么咱们就需求运用到一个 nfs-client 的主动装备程序,也叫它Provisioner,这个程序运用咱们现已装备的nfs服务器,来主动创立耐久卷,也就是主动帮咱们创立PV。

主动创立的 PV 以 namespace−{namespace} – {pvcName}- pvName这样的命名格局创立在NFS服务器上的同享数据目录中,而当这个PV被收回后会以archieved−{pvName} 这样的命名格局创立在 NFS 服务器上的同享数据目录中,而当这个 PV 被收回后会以 archieved- {namespace}- pvcName−{pvcName}- {pvName} 这样的命名格局存在 NFS 服务器上。

  • 当然在布置nfs-client之前,需求先成功装置上 nfs 服务器,上面现已装置好了,服务地址是172.16.11.17,同享数据目录是/data/k8s/,然后布置 nfs-client 即可。

创立Deployment

  • 首要装备 Deployment(nfs-client.yaml)
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-client-provisioner
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: quay.io/external_storage/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 172.16.11.17   #替换成自己的nfs服务器
            - name: NFS_PATH
              value: /data/k8s  # 替换成自己的挂载目录
      volumes:
        - name: nfs-client-root
          nfs:
            server: 172.16.11.17   #替换成自己的nfs服务器
            path: /data/k8s  # 替换成自己的挂载目录

创立ServiceAccount

  • Deployment运用了一个名为nfs-client-provisioner的serviceAccount,所以也需求创立一个 sa,然后绑定上对应的权限。(nfs-client-sa.yaml)
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
  • 新建的一个名为 nfs-client-provisioner 的ServiceAccount,然后绑定了一个名为 nfs-client-provisioner-runner 的ClusterRole,而该ClusterRole声明晰一些权限,其中就包括对persistentvolumes的增、删、改、查等权限,所以咱们能够利用该ServiceAccount来主动创立 PV。

创立StorageClass目标

  • nfs-client 的 Deployment 声明完结后,就能够创立一个StorageClass目标。(nfs-client-class.yaml)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: course-nfs-storage
provisioner: fuseim.pri/ifs
  • 声明晰一个名为 course-nfs-storage 的StorageClass目标。
  • 注意provisioner对应的值必定要和上面的Deployment下面的 PROVISIONER_NAME 这个环境变量的值相同。

创立资源目标

kubectl create -f nfs-client.yaml
kubectl create -f nfs-client-sa.yaml
kubectl create -f nfs-client-class.yaml
  • 查看资源状况
kubectl get pods
# 查看存储类
kubectl get storageclass

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

  • 能够设置这个 course-nfs-storage 的 StorageClass 为 Kubernetes 的默许存储后端,咱们能够用 kubectl patch 指令来更新。
kubectl patch storageclass course-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
  • 履行完指令后,咱们默许存储类就装备成功了。
kubectl get storageclass

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

常见问题

问题一

  • 布置k8s动态耐久卷nfs报错如下:
waiting for a volume to be created, either by external provisioner “gxf-nfs-storage” or manually created by system administrator
  • 因为Kubernetes 1.20禁用了selfLink,创立的时分会报错。
vi  /etc/kubernetes/manifests/kube-apiserver.yaml
  • 增加一行内容
- --feature-gates=RemoveSelfLink=false

使用kubeadm快速部署一个K8s集群、并安装KubeSphere

  • 从头运用
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
  • 继续弥补中…

3、# Kubernetes 上最小化装置 KubeSphere

布置 KubeSphere

保证您的机器满足装置的前提条件之后,能够依照以下步骤装置 KubeSphere。

  1. 履行以下指令开端装置:

    kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/kubesphere-installer.yaml
    kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/cluster-configuration.yaml
    
  2. 查看装置日志:

    kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
    
  3. 运用kubectl get pod --all-namespaces查看一切 Pod 是否在 KubeSphere 的相关命名空间中正常运转。假如是,请经过以下指令查看控制台的端口(默许为30880):

    kubectl get svc/ks-console -n kubesphere-system
    
  4. 保证在安全组中翻开了端口30880,并经过 NodePort(IP:30880)运用默许帐户和暗码(admin/P@88w0rd)拜访 Web 控制台。

  5. 登录控制台后,您能够在服务组件中查看不同组件的状况。假如要运用相关服务,或许需求等待某些组件发动并运转。

    使用kubeadm快速部署一个K8s集群、并安装KubeSphere

启用可插拔组件(可选)

本指南仅适用于默许的最小化装置。若要在 KubeSphere 中启用其他组件,请参见启用可插拔组件。