一.什么是k8s

二:k8s的部署过程

实验准备:此次实验k8s所需rpm包以及镜像都是1.15.0版本

主机服务
server1manager
server2node
server3node

前提:

做这个实验前,我们因为做过swarm集群,所以需要将swarm集群删除,否则会跟k8s冲突,为了一个纯净的实验环境,我们需要进行以下操作:

server1:

 1003  docker stack rm portainer 
 1001  docker stack ls
 1004  docker volume prune 
 1011  docker node ls
 1012  docker node rm server4     #在server4离开集群之后才能删除
 1013  docker node rm server3     #在server3离开集群之后才能删除
 1014  docker node rm server2     #在server2离开集群之后才能删除
 1015  docker node ls
 1017  docker swarm leave -f
 1018  docker node ls                 #此时显示命令不可用,因为server1已经离开集群
 1019  docker network prune 
 1020  docker network ls
 1021  docker volume ls

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

最终结果图:
在这里插入图片描述

server2/3/4:

[root@server2 ~]# docker swarm leave    #离开集群
Node left the swarm.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验步骤如下:

在server1,server2,server3安装相应的软件
需要在每台机器上都安装以下的软件包:

  • kubeadm: 用来初始化集群的指令。

  • kubelet: 在集群中的每个节点上用来启动 pod 和 container 等。

  • kubectl: 用来与集群通信的命令行工具。

    kubeadm 不能 帮您安装或管理 kubelet 或 kubectl ,所以您得保证他们满足通过 kubeadm 安装的 Kubernetes 控制层对版本的要求。如果版本没有满足要求,就有可能导致一些难以想到的错误或问题。然而控制层与 kubelet 间的 小版本号 不一致无伤大雅,不过请记住 kubelet 的版本不可以超过 API server 的版本。例如 1.8.0 的 API server 可以适配 1.7.0 的 kubelet,反之就不行了

第一步:安装k8s并关闭swap分区

在物理机上将k8s所需要的软件包都拷贝到我们需要做实验的虚拟机上面:
在这里插入图片描述

在server1/2/3安装k8s软件包:

[root@server1 rpm]# pwd
/mnt/rpm
[root@server1 rpm]# ls
cri-tools-1.13.0-0.x86_64.rpm  kubelet-1.15.0-0.x86_64.rpm
kubeadm-1.15.0-0.x86_64.rpm    kubernetes-cni-0.7.5-0.x86_64.rpm
kubectl-1.15.0-0.x86_64.rpm
[root@server1 rpm]# yum install -y *

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server1/2/3关闭swap:

[root@server3 rpm]# swapoff -a
[root@server3 rpm]# vim /etc/fstab
[root@server3 rpm]# tail -n 1 /etc/fstab
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

第二步:导入镜像

在物理机将镜像拷贝到虚拟机:

在这里插入图片描述

server1/2/3导入k8s镜像:

[root@server1 mnt]# cd k8s
[root@server1 k8s]# ls
coredns.tar  kube-apiserver.tar           kube-proxy.tar      pause.tar
etcd.tar     kube-controller-manager.tar  kube-scheduler.tar
[root@server1 k8s]# for i in *.tar; do docker load -i $i ; done

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第三步:配置k8s文件

server1:

[root@server1 k8s]# cat <<EOF > /etc/sysctl.d/k8s.conf
  > net.bridge.bridge-nf-call-ip6tables = 1
  > net.bridge.bridge-nf-call-iptables = 1
  > EOF
[root@server1 k8s]# sysctl --system
[root@server1 k8s]# sysctl net.bridge.bridge-nf-call-ip6tables
net.bridge.bridge-nf-call-ip6tables = 1
[root@server1 k8s]# sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1

在这里插入图片描述

拷贝文件给server2/3(为了方便跟不出错)

[root@server1 k8s]# cd /etc/sysctl.d/
[root@server1 sysctl.d]# ls
99-sysctl.conf  k8s.conf
[root@server1 sysctl.d]# scp -r k8s.conf server2:/etc/sysctl.d/
k8s.conf                                       100%   79     0.1KB/s   00:00    
[root@server1 sysctl.d]# scp -r k8s.conf server3:/etc/sysctl.d/
k8s.conf                                       100%   79     0.1KB/s   00:00    
[root@server1 sysctl.d]# systemctl start kubelet
[root@server1 sysctl.d]# systemctl enable kubelet

在这里插入图片描述

server2/3

[root@server2 k8s]# sysctl --system
[root@server2 k8s]# sysctl net.bridge.bridge-nf-call-ip6tables
net.bridge.bridge-nf-call-ip6tables = 1
[root@server2 k8s]# sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1

在这里插入图片描述

在这里插入图片描述

第四步:创建集群并加入集群

server1:创建集群

[root@server1 sysctl.d]# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.25.27.1

在这里插入图片描述

断电去加cpu数量:

在这里插入图片描述
再去初始化集群,成功:
在这里插入图片描述
在这里插入图片描述

server2/3:加入集群

kubeadm join 172.25.27.1:6443 --token l0lw2q.wzrdx6wija0l05po \
    --discovery-token-ca-cert-hash sha256:1719d66ffa7497cac7ec61bf8c93f2c293643b32c9e6e2594f9159f5a353111f

在这里插入图片描述

在这里插入图片描述

第五步:集群创建好之后要进行的步骤

server1:

[root@server1 ~]# useradd kubeadm
[root@server1 ~]# vim /etc/sudoers
[root@server1 ~]# tail -n 1 /etc/sudoers      
kubeadm 	ALL=(ALL) 	NOPASSWD: ALL

在这里插入图片描述
修改回来的:
在这里插入图片描述

切换用户做以下操作:

[root@server1 ~]# su - kubeadm
Last login: Fri Aug  9 12:37:51 CHOST 2019 on pts/0
[kubeadm@server1 ~]$ mkdir -p $HOME/.kube
[kubeadm@server1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[kubeadm@server1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
[kubeadm@server1 ~]$ kubectl get all
[kubeadm@server1 ~]$ kubectl get node
[kubeadm@server1 ~]$ exit

在这里插入图片描述
在这里插入图片描述

如果想在kubeadm用户下可以补齐命令,配置 kubectl 命令补齐功能,可以进行以下操作:

[root@server1 ~]# vim /home/kubeadm/.bashrc
source <(kubectl completion bash)
此时在切换kubeadm就可以补齐

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第六步:部署网络插件flannel

在物理机上将flannel所需要的镜像发送给server1/2/3

在这里插入图片描述

server1/2/3导入镜像

[root@server1 k8s]# docker load -i flannel.tar

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在物理机上将kube-flannel.yml文件发送到server1上的kubeadm家目录下。

在这里插入图片描述

server1:

[root@server1 ~]# su - kubeadm 
[kubeadm@server1 ~]$ ls
kube-flannel.yml
[kubeadm@server1 ~]$ kubectl apply -f kube-flannel.yml 
[kubeadm@server1 ~]$ kubectl get nodes      #查看节点信息
[kubeadm@server1 ~]$ kubectl get pods --all-namespaces   #   #获取所有命名空间中的所有Pod

在这里插入图片描述

显示全部running即为成功
在这里插入图片描述

注意:做这个实验需要各个node设置网关(需不需要联网待确认,但是为了确保,还是保证虚拟机能够上网比较好,我就是全程虚拟机可以上网),主node的内存设置大一点,要不没有调度资源。如果没有做以上设置,可能会出现不是running(第一和第二个)是pending的情况。

二.图形化管理k8s集群

我们前面的实验是通过命令创建管理k8s集群,但此刻我们想用一个直观简介的Web UI来管理,这就需要我们进行以下的操作:

第一步:导入镜像

在物理机将需要的镜像和yaml文件上传给server1/2/3,其实2/3只需要镜像,但是我一并上传了,不影响什么,因为2/3里并没有做操作:

在这里插入图片描述
server1/2/3:因为不确定Pod会被调度在哪一个node上,所以每一个节点上都要导入镜像

[root@server2 ~]# docker load -i kubernetes-dashboard.tar

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第二步:创建Pod

server1:

[root@server1 ~]# mv kubernetes-dashboard.yaml /home/kubeadm/
[root@server1 ~]# su - kubeadm
[kubeadm@server1 ~]$ kubectl apply -f kubernetes-dashboard.yaml
[kubeadm@server1 ~]$ kubectl get pods -n kube-system 
[kubeadm@server1 ~]$ kubectl get deployments. -n kube-system

在这里插入图片描述
在这里插入图片描述

第三步:修改service的配置

在server1上面修改service的配置,找到type,将ClusterIP改成NodePort

[kubeadm@server1 ~]$ kubectl  describe  svc kubernetes-dashboard -n kube-system    #此时是ClusterIP模式
[kubeadm@server1 ~]$ kubectl edit service kubernetes-dashboard -n kube-system    #修改,寻找typr就可以找到
service/kubernetes-dashboard edited
[kubeadm@server1 ~]$ kubectl  describe  svc kubernetes-dashboard -n kube-system    #此时是NodePort模式
[kubeadm@server1 ~]$ kubectl get service --namespace=kube-system     #查看暴露端口

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

查看暴露端口:

在这里插入图片描述

第四步:创建kubernetes-dashboard用户并获取登陆token

[kubeadm@server1 ~]$ vim dashboard-admin.yaml
[kubeadm@server1 ~]$ cat dashboard-admin.yaml      
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

---                   #文件里以---分割符号

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: kube-system

在这里插入图片描述

[kubeadm@server1 ~]$ kubectl apply -f dashboard-admin.yaml          #创建用户
[kubeadm@server1 ~]$ kubectl get secrets -n kube-system | grep admin | awk '{print $1}'          #查看创建的用户
admin-user-token-bxgrg
[kubeadm@server1 ~]$ kubectl describe secrets admin-user-token-bxgrg -n kube-system           #查看登陆用户的token

在这里插入图片描述

在这里插入图片描述

第五步:浏览器登陆

浏览器输入https:NodelIP:PORT,我的是https:172.25.27.1:32607

在这里插入图片描述

认证方式选令牌,输入刚才获取到的token,即可登陆成功

在这里插入图片描述
登陆成功如下图:

在这里插入图片描述

可查看集群nodes:

在这里插入图片描述

更多推荐