大家好,我是SuieKa。在之前呢有幸学习了马哥教育提供的K8s入门指南以及视频。初来乍到,写一篇关于K8s的介绍以及部署测试环境使用的K8s集群。

  • @·K8s入门简单介绍
    • 一、K8s(Kubernetes)简介
    • 二、K8s(Kubernetes)架构
  • @·使用kubeadm工具部署测试环境的K8s集群
    • 一、使用kubeadm工具部署过程
      • 1、测试环境预设准备(三台统一)
      • 2、安装docker容器引擎(三台统一)
      • 3、安装kubernetes相关程序包(三台统一)
      • 4、初始化主节点(在master上完成)
      • 5、将node节点加入集群
    • 二、安装dashboard界面(master操作)
  • @·K8s常用命令

@·K8s入门简单介绍

一、K8s(Kubernetes)简介

1、K8s是啥???
Kubernetes 是容器集群管理系统, 是一个开源的平台, 可以实现容器集群的自动化部署、自动扩缩容、 维护等功能。我相信大家都知道K8s是啥,这只是简称,全称为Kubernetes。Kubernetes 的名字来自希腊语, 意思是“舵手” 或“领航员” , K8s 是将 8 个字母“ubernete”,替换为“8” 的缩写。。所以K8s图标会是一个舵手的那么一个标志。
总结出三点:
K8s是一个全新的基于容器技术的分布式架构领先方案
K8s是一个开放的开源的开发平台
K8s是一个完备的分布式系统支撑平台

2、通过 Kubernetes 你可以干啥???
 快速部署应用
 快速扩展应用
 无缝对接新的应用功能
 节省资源, 优化硬件资源的使用
 我们的目标是促进完善组件和工具的生态系统, 以减轻应用程序在公有云或私有云中运行的负担

并且,使用Kubernetes你可以做:
可以在物理或虚拟机的Kubernetes集群上运行容器化应用, Kubernetes 能提供一个以“容
器为中心的基础架构” , 满足在生产环境中运行应用的一些常见需求, 如下几点:
多个进程(作为容器运行) 协同工作。 (Pod)
 存储系统挂载
 Distributing secrets
 应用健康检测
 应用实例的复制
 Pod 自动伸缩/扩展
 Naming and discovering
 负载均衡
 滚动更新
 资源监控
 日志访问
 调试应用程序
 提供认证和授权

K8s并不是传统的PaaS(平台即服务)系统。

3、K8s特点是啥???
 可移植: 支持公有云, 私有云, 混合云, 多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
 自动化: 自动部署, 自动重启, 自动复制, 自动伸缩/扩展

4、K8s主要功能有啥???
 基于容器的应用部署,维护和滚动升级
 负载均衡和服务发现
 跨机器和跨地区的集群调度
 自动升缩
 无状态服务和有状态服务
 广泛的Volume支持
 插件机制保证扩展性

二、K8s(Kubernetes)架构

那么,K8s在最初源于谷歌内部的 Borg, 提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理/虚拟计算, 网络和存储基础设施的负担, 并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。 Kubernetes 也提供稳定、 兼容的基础(平台) , 用于构建定制化的 workflows 和更高级的自动化任务。
Kubernetes 具备完善的集群管理能力, 包括多层次的安全防护和准入机制、 多租户应用支撑能力、 透明的服务注册和服务发现机制、 内建负载均衡器、 故障发现和自我修复能力、 服务滚动升级和在线扩容、 可扩展的资源自动调度机制、 多粒度的资源配额管理能力。
Kubernetes 还提供完善的管理工具, 涵盖开发、 部署测试、 运维监控等各个环节。
参考文档连接:谷歌内部的Borg介绍

Kubernetes 借鉴了 Borg 的设计理念, 比如 Pod、 Service、 Labels 和单 Pod 单 IP 等。Kubernetes 的整体架构跟 Borg 非常像。网上有很多的架构原理图,如下参考:


看的头都有点晕哈,刚开始学习接触K8s都这样,一个刚入手的新人的我最初也是看不懂的,但学习了过后再来看差不多就知道了。在这里面涉及到了很多组件,那么,Kubernetes的组件有哪些?由那些核心组件组成?我们来看看

一个 Kubernetes 集群由分布式存储 etcd、 控制节点 controller 以及服务节点 Node 组成。

  1. 控制节点主要负责整个集群的管理, 比如容器的调度、 维护资源的状态、 自动扩展以及滚动更新等
  2. 服务节点是真正运行容器的主机, 负责管理镜像和容器以及 cluster 内的服务发现和负载均衡
  3. etcd 集群保存了整个集群的状态

1、K8s主要由以下几个核心组件组成:

  • etcd 保存了整个集群的状态;
  • API Server 提供了资源操作的唯一入口, 并提供认证、 授权、 访问控制、 API 注册和发现等机制;
  • Controller Manager 负责维护集群的状态, 比如故障检测、 自动扩展、 滚动更新等;
  • Scheduler 负责资源的调度, 按照预定的调度策略将 Pod 调度到相应的机器上;
  • Kubelet 负责维护容器的生命周期, 同时也负责 Volume( CVI) 和网络( CNI) 的管理;
  • Container Runtime 负责镜像管理以及 Pod 和容器的真正运行( CRI) ;
  • Kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;

笼统的讲:
一个Master节点的4个重要核心组件:etcd、API server、controller manager、scheduler。
一个Node节点的三个重要核心组件:kubelet、Container runtime、kube-proxy。

对于里面的一些详细说明,比如工作流程,创建Pod,以及创建删除Pod流程,还有各大组件以及设计理念。我还没达到为大家详细讲解的水平哈,如果想认真学习,可以去kubernetes官网看看,里面有详细文档可供浏览:K8s家目录,组件介绍

@·使用kubeadm工具部署测试环境的K8s集群

上面我们基本知道了K8s的功能,对于初步想体验的用户,有几种免费体验网址,我刚开始比较喜欢使用Katacoda playground。Katacoda playground提供了一个免费的 2 节点 Kubernetes 体验环境, 网络基于WeaveNet, 并且会自动部署整个集群。 但要注意, 刚打开 Katacoda playground 页面时集群有可能还没初始化完成, 可以在 master 节点上运行 launch.sh 等待集群初始
化完成。打开网址:Katacoda playground,点击

就出现了两个体验节点

没那么简单哈,现在我就是用kubeadm部署测试环境的K8s集群,我使用了一个Master节点,两个Node节点,一般测试环境需要一个Master和至少一个node就可以了。为了测试环境的佳性,我使用两台node。

在K8s当中,不管外集群的用户还是客户,下达的指令都必须通过API server组件,他是唯一入口, 并提供认证、 授权、 访问控制、 API 注册和发现等机制。所以API server是一个很重要的组件之一。在这里呢我的测试环境基本为,三台CentOS7.5,,一台Master,单etcd,两台node。部署K8s集群两个环境基本需求如下:
测试环境:

  1. 可以使用单Master节点,单etcd实例;
  2. Node节点主机数量按需要而定,至少一个;
  3. nfs或glusterfs等存储系统。

生产环境

  1. 高可用etcd集群,建立3、5或7个节点;

  2. 高可用Master:
    [1] kube-apiserver无状态,可多etcd实例:
    (a)借助于keepalived进行流动实现实例冗余;
    (b)或在多实例前端通过HAProxy或Nginx反代,并借助与keepalived对代理服务器进行冗余。

    [2]kube-scheduler及kube-controller-manager各自只能右一个活动实例,但可以多个备用:
    (a)各自自带leader选举的功能,并且默认处于启用状态。

  3. 多Node主机,数量越多,冗余能力越强;

  4. ceph,glusterfs,iSCSI,FCSAN及各种云存储等。

常用部署环境:

  • IaaS公有云环境:AWS、GCE、Azure等;
  • IaaS私有云或公有云环境:Openstack和vSphere等;
  • Baremetal环境:物理服务器或独立的虚拟机等。

常用的部署工具:kubeadm(官网推荐)、kops、kubespray、kontena Pharos等

一、使用kubeadm工具部署过程

1、测试环境预设准备(三台统一)

三台CentOS:

master节点:192.168.1.100
node1主机:192.168.1.101
node2主机:192.168.1.102
测试使用的kubernetes集群主机可以是物理服务器,也可以是运行在vmare、virtualbox或kvm等虚拟化平台的虚拟机,甚至是公有云上的VPS主机。测试环境用的主机分别需要4核心CPU及4G的内存。

修改主机名:master、node1、node2

(1)设定时钟,各主机同步
三台主机都可以访问外网,直接启动chronyd系统服务,并设置开机启动

(2)配置hosts主机名解析
[11:57:52 root@master ~]#vi /etc/hosts

(3)关闭firewalld防火墙
[09:33:28 root@master ~]#systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

(4)关闭禁用SELinux
[12:08:54 root@master ~]#sed -i ‘s#^(SELINUX=).*#\1disabled#’ /etc/selinux/config
[12:09:57 root@master ~]#setenforce 0

setenforce: SELinux is disabled

(5)禁用Swap设备
[12:18:45 root@master ~]#swapoff -a
编辑文件/etc/fstab注释掉swap设备的行。

使用命令free -m查看内存占用,若物理内存够用,最好禁用swap避免部署报错

(6)配置主机互信,免密

[09:38:04 root@master ~]#ssh-keygen -t rsa
[09:40:41 root@master ~]#ssh-copy-id root@master
[09:40:41 root@master ~]#ssh-copy-id root@node1
[09:40:41 root@master ~]#ssh-copy-id root@node2

(7)启用ipvs内核模块
创建内核模块载入相关的脚本文件/etc/sysconfig/modules/ipvs.modules:
[09:35:39 root@master ~]#vi /etc/sysconfig/modules/ipvs.modules

#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for mod in $(ls $ipvs_mods_dir | grep -o "^[^.]*");do/sbin/modinfo -F filename $mod &> /dev/nullif [ $? -eq 0 ]; then/sbin/modprobe $modfi
done

修改文件权限,并手动为当前系统加载内核模块

[09:37:51 root@master ~]#chmod +x /etc/sysconfig/modules/ipvs.modules
[09:37:55 root@master ~]#bash  /etc/sysconfig/modules/ipvs.modules

node节点统一

[09:40:41 root@master ~]#scp /etc/sysconfig/modules/ipvs.modules node1:/etc/sysconfig/modules/ipvs.modules
ipvs.modules                                               100%  252   217.6KB/s   00:00
[09:42:29 root@master ~]#scp /etc/sysconfig/modules/ipvs.modules node2:/etc/sysconfig/modules/ipvs.modules
ipvs.modules                                               100%  252   189.5KB/s   00:00**
**[09:43:24 root@node1 ~]#chmod +x /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules
[09:35:11 root@node2 ~]#chmod +x /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

2、安装docker容器引擎(三台统一)

阿里云:docker-ce安装
(1)安装必要的系统工具:

[13:39:09 root@master ~]#yum install -y yum-utils device-mapper-persistent-data lvm2

(2)添加软件源信息

[13:40:07 root@master ~]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(3)建立元数据缓存并安装Docker-ce

[13:41:24 root@master ~]#yum makecache fast
[13:43:21 root@master ~]#yum -y install docker-ce

(4)网络模块开机自动加载

[09:54:27 root@master ~]#cat > /etc/modules-load.d/docker.conf <<EOF
> overlay
> br_netfilter
> EOF
[09:56:00 root@master ~]#modprobe overlay
[09:56:14 root@master ~]#modprobe br_netfilter

(5)配置镜像加速

#vi /etc/docker/daemon.json{ "registry-mirrors": ["https://rb3s8jte.mirror.aliyuncs.com"] }

(6)启动docker并开机启动
使用命令查看内核参数值是否为 1

手动加入,创建文件/etc/sysctl.d/k8s.conf

[09:56:19 root@master ~]#cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF

并重读文件
sysctl -p /etc/sysctl.d/k8s.conf

[16:50:56 root@master ~]#sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

启动docker并开机自启

[10:03:38 root@master ~]#systemctl daemon-reload && systemctl start docker && systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

3、安装kubernetes相关程序包(三台统一)

(1)添加kubernetes源

[14:28:56 root@master ~]#cd /etc/yum.repos.d/
[14:29:13 root@master yum.repos.d]#vi k8s.repo
[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
[14:43:15 root@master yum.repos.d]#yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile* base: mirrors.aliyun.com* extras: mirrors.aliyun.com* updates: mirrors.aliyun.com
kubernetes/signature                                                  |  454 B  00:00:00
从 https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 检索密钥
导入 GPG key 0xA7317B0F:用户ID     : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>"指纹       : d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f来自       : https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
是否继续?[y/N]:y
从 https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 检索密钥
kubernetes/signature                                                  | 1.4 kB  00:00:02 !!!
kubernetes/primary                                                    |  74 kB  00:00:00
kubernetes                                                                           542/542
源标识                             源名称                                              状态
base/7/x86_64                      CentOS-7 - Base - mirrors.aliyun.com                10,070
docker-ce-stable/x86_64            Docker CE Stable - x86_64                               79
extras/7/x86_64                    CentOS-7 - Extras - mirrors.aliyun.com                 412
kubernetes                         kubernetes                                             542
updates/7/x86_64                   CentOS-7 - Updates - mirrors.aliyun.com                900
repolist: 12,003
[10:07:09 root@master yum.repos.d]#scp k8s.repo node1:/etc/yum.repos.d/
k8s.repo                                                   100%  357   310.5KB/s   00:00
[10:08:00 root@master yum.repos.d]#scp k8s.repo node2:/etc/yum.repos.d/
k8s.repo                                                   100%  357   259.2KB/s   00:00

(2)安装软件包
kubectl工具在安装另外两个时会自动安装上

[14:47:05 root@master ~]#yum install -y kubelet kubeadm kubectl
[14:47:57 root@master ~]#systemctl enable kubelet && systemctl start kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

(3)安装自动补全命令

[17:41:54 root@master ~]#yum install -y bash-completion
[17:42:40 root@master ~]#kubectl completion bash > /etc/bash_completion.d/kubectl
[17:42:42 root@master ~]#kubeadm completion bash > /etc/bash_completion.d/kubeadm

4、初始化主节点(在master上完成)

(1)设置Swap设备(三台统一)
若之前没禁用Swap设备,则需要kubelet编辑文件/etc/sysconfig/kubelet,设置其忽略Swap启用的状态错误。

(2)拉取镜像(三台统一)
kubernetes镜像需要从mirrors站点或通过dockerhub用户推送的镜像拉取,我们先在master节点上看看指定k8s版本需要哪些镜像。

[17:43:44 root@master ~]#kubeadm config images list
W0723 18:03:34.252865   28155 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
k8s.gcr.io/kube-apiserver:v1.18.6
k8s.gcr.io/kube-controller-manager:v1.18.6
k8s.gcr.io/kube-scheduler:v1.18.6
k8s.gcr.io/kube-proxy:v1.18.6
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

对于现在来说由于我使用的是较新的v1.18.6版本,只怕万一阿里云还没更新到,所以通过dockerhub上拉取,创建拉取镜像脚本:(三台统一)

#vi k8s.images.sh#!/bin/bash
#
#*****************************************************************
#Author:                        wangzhike
#QQ:                            2358468640
#Date:                          2020-07-23
#FileName:                      k8s.images.sh
#Copyright(C):                  2020 All rights reserved
#*****************************************************************
#版本与查看k8s镜像对应
KUBE_VERSION=v1.18.6
PAUSE_VERSION=3.2
CORE_DNS_VERSION=1.6.7
ETCD_VERSION=3.4.3-0#从hub拉取镜像
docker pull kubeimage/kube-proxy-amd64:$KUBE_VERSION
docker pull kubeimage/kube-controller-manager-amd64:$KUBE_VERSION
docker pull kubeimage/kube-apiserver-amd64:$KUBE_VERSION
docker pull kubeimage/kube-scheduler-amd64:$KUBE_VERSION
#从aliyun pull镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION#改标签
docker tag kubeimage/kube-proxy-amd64:$KUBE_VERSION  k8s.gcr.io/kube-proxy:$KUBE_VERSION
docker tag kubeimage/kube-controller-manager-amd64:$KUBE_VERSION k8s.gcr.io/kube-controller-manager:$KUBE_VERSION
docker tag kubeimage/kube-apiserver-amd64:$KUBE_VERSION k8s.gcr.io/kube-apiserver:$KUBE_VERSION
docker tag kubeimage/kube-scheduler-amd64:$KUBE_VERSION k8s.gcr.io/kube-scheduler:$KUBE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION k8s.gcr.io/coredns:$CORE_DNS_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION#删除拉取的不是k8s.gcr.io标签的镜像
docker rmi kubeimage/kube-proxy-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-controller-manager-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-apiserver-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-scheduler-amd64:$KUBE_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
[10:20:47 root@master ~]#scp k8s.images.sh node1:/root
k8s.images.sh                                              100% 2417     1.5MB/s   00:00
[10:21:01 root@master ~]#scp k8s.images.sh node2:/root
k8s.images.sh                                              100% 2417     1.9MB/s   00:00

加执行权限并拉取
三台同时拉取还有点慢

[18:21:56 root@master ~]#chmod +x k8s.images.sh
[18:21:56 root@master ~]#./k8s.images.sh

若有些在一同拉去时没拉取下来,只需要拉取就可以了,不要重复执行脚本
docker images查看拉取的镜像

[18:25:13 root@master ~]#docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.18.6             c3d62d6fe412        7 days ago          117MB
k8s.gcr.io/kube-apiserver            v1.18.6             56acd67ea15a        7 days ago          173MB
k8s.gcr.io/kube-controller-manager   v1.18.6             ffce5e64d915        7 days ago          162MB
k8s.gcr.io/kube-scheduler            v1.18.6             0e0972b2b5d1        7 days ago          95.3MB
k8s.gcr.io/pause                     3.2                 80d28bedfe5d        5 months ago        683kB
k8s.gcr.io/coredns                   1.6.7               67da37a9a360        5 months ago        43.8MB
k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        9 months ago        288MB

(3)初始化master(仅master主机操作)
修改kubelet配置默认cgroup driver
这里在/var/lib/下是没有kubelet目录的,需要创建

[18:37:10 root@master ~]#mkdir /var/lib/kubelet/#写入
[18:37:41 root@master ~]#vi /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd#重启kubelet
[18:38:13 root@master ~]#systemctl restart kubelet

使用一条命令初始化:kubeadm init --kubernetes-version=v1.18.6 --pod-network-cidr=10.244.0.0/16
最后输出信息就表示成功

[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxyYour Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.1.100:6443 --token xk49qn.9r7golk5oedxosf0 \--discovery-token-ca-cert-hash sha256:d68a67024f2473368729011d0211528207342a3395241cbb40d1784086db48a5

【1】注意最后一条信息kubeadm join 192.168.1.100:6443 --token xk49qn.9r7golk5oedxosf0
–discovery-token-ca-cert-hash sha256:d68a67024f2473368729011d0211528207342a3395241cbb40d1784086db48a5
这个命令在之后加入集群会用到。

【2】注意中间提示信息,若日常会有用户使用集群,则需要为其用户添加使用权限,在这里我就直接使用root:

#master主机
[19:03:57 root@master ~]#mkdir -p $HOME/.kube
[19:05:26 root@master ~]#cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[19:05:55 root@master ~]#chown $(id -u):$(id -g) $HOME/.kube/config
[19:06:04 root@master ~]#echo "export KUBECONFIG=$HOME/.kube/config" >> ~/.bashrc

然后就是配置master认证
若没有配置在查看节点状态时汇报这样的一个信息:

[19:06:30 root@master ~]#echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> /etc/profile
[19:09:00 root@master ~]#. /etc/profile


(4)安装网络组件(flannel)(只master节点操作)
下载flannel最新配置文件
添加hosts:199.232.28.133 raw.githubusercontent.com,不然无法访问

[19:20:14 root@master ~]#kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created

查看状态

使用命令查看具体状态变化
[19:27:08 root@master ~]#kubectl get pods -n kube-system

若STATUS状态还是NotReady,可能需要等一会,注意观察状态变化

5、将node节点加入集群

前面已经注意到的命令
或者已经找不到了,使用命令生成

[21:18:39 root@master ~]#kubeadm token create --ttl 0 --print-join-command
W0723 21:19:04.509454  102451 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
kubeadm join 192.168.1.100:6443 --token 42989t.sf5weyksr4daj6ut     --discovery-token-ca-cert-hash sha256:d68a67024f2473368729011d0211528207342a3395241cbb40d1784086db48a5

(1)node1节点加入集群

[20:05:49 root@node1 ~]#kubeadm join 192.168.1.100:6443 --token xk49qn.9r7golk5oedxosf0 \
>     --discovery-token-ca-cert-hash sha256:d68a67024f2473368729011d0211528207342a3395241cbb40d1784086db48a5
W0723 20:40:45.970174   59490 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.18" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

(2)node2节点加入集群

[20:43:49 root@node2 ~]#kubeadm join 192.168.1.100:6443 --token xk49qn.9r7golk5oedxosf0     --discovery-token-ca-cert-hash sha256:d68a67024f2473368729011d0211528207342a3395241cbb40d1784086db48a5
W0723 20:43:52.965073   59760 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.18" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

查看集群节点状态
性能差的服务器到达Ready状态时间会长些,,,

[11:56:02 root@master kubernetes]#kubectl get nodes
NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   48m    v1.18.6
node1    Ready    <none>   30m    v1.18.6
node2    Ready    <none>   5m5s   v1.18.6
[11:53:34 root@master kubernetes]#kubectl get pods -n kube-system -o wide
NAME                             READY   STATUS    RESTARTS   AGE    IP              NODE     NOMINATED NODE   READINESS GATES
coredns-66bff467f8-5lhrf         1/1     Running   0          47m    10.244.0.2      master   <none>           <none>
coredns-66bff467f8-t6r2z         1/1     Running   0          47m    10.244.0.3      master   <none>           <none>
etcd-master                      1/1     Running   0          48m    192.168.1.100   master   <none>           <none>
kube-apiserver-master            1/1     Running   0          48m    192.168.1.100   master   <none>           <none>
kube-controller-manager-master   1/1     Running   0          48m    192.168.1.100   master   <none>           <none>
kube-flannel-ds-amd64-74fgz      1/1     Running   0          5m3s   192.168.1.102   node2    <none>           <none>
kube-flannel-ds-amd64-bvgkh      1/1     Running   0          30m    192.168.1.101   node1    <none>           <none>
kube-flannel-ds-amd64-rqts9      1/1     Running   0          43m    192.168.1.100   master   <none>           <none>
kube-proxy-28ppc                 1/1     Running   0          47m    192.168.1.100   master   <none>           <none>
kube-proxy-9qlc9                 1/1     Running   0          30m    192.168.1.101   node1    <none>           <none>
kube-proxy-mc6dw                 1/1     Running   0          5m3s   192.168.1.102   node2    <none>           <none>
kube-scheduler-master            1/1     Running   0          48m    192.168.1.100   master   <none>           <none>

二、安装dashboard界面(master操作)

(1)下载dashboard的yaml文件

[12:05:59 root@master ~]#wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
[12:05:54 root@master ~]#wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
--2020-07-24 12:05:56--  https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 199.232.28.133
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|199.232.28.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:7552 (7.4K) [text/plain]
正在保存至: “recommended.yaml”100%[===================================================================================================================================================>] 7,552       26.9KB/s 用时 0.3s   2020-07-24 12:05:59 (26.9 KB/s) - 已保存 “recommended.yaml” [7552/7552])

(2)修改dashboard的yaml文件service类型为NodePort
[12:08:32 root@master ~]#vi recommended.yaml

(3)安装dashboard

[12:09:50 root@master ~]#kubectl create -f recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

查看Dashboard 关联pod和service的状态(两个Running)
稍微等待一会再查看就好了

[12:12:14 root@master ~]#kubectl get pod,svc -n kubernetes-dashboard
NAME                                             READY   STATUS    RESTARTS   AGE
pod/dashboard-metrics-scraper-6b4884c9d5-ltfts   1/1     Running   0          2m6s
pod/kubernetes-dashboard-7b544877d5-m82cb        1/1     Running   0          2m7sNAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
service/dashboard-metrics-scraper   ClusterIP   10.108.199.94    <none>        8000/TCP        2m7s
service/kubernetes-dashboard        NodePort    10.108.152.195   <none>        443:30443/TCP   2m7s

(4)创建serviceaccount和clusterrolebinding资源YAML文件

#vi adminuser.yamlapiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard

创建admin-user并且赋予admin-user集权管理员权限

[12:14:49 root@master ~]#kubectl create -f adminuser.yaml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

(5)浏览器访问https://192.168.1.100:30443
输入查看的token,有点长,直接复制

[12:16:00 root@master ~]#kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-qkx8h
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-userkubernetes.io/service-account.uid: 0853f0e7-34ec-4ea1-b0ba-43bc0767ba6dType:  kubernetes.io/service-account-tokenData
====
ca.crt:     1025 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IlViYVBmbml1bGh0ZjRFLUE2QVJUMnM1eHgzaVFvbXMwenFvLWM3aGdVRVEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXFreDhoIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwODUzZjBlNy0zNGVjLTRlYTEtYjBiYS00M2JjMDc2N2JhNmQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.GDxTv6okYqXnVUy2z8nt56gBq2KGFXwzOazUeojRolSrKs1-FgXauAQ-UyMchH6j6E_dfnrKqPXpiK_9Hnd-14mToC5U1LnFBZxwC3DrBedewbAzfLYk5TxhS5y6y62jZDsXfYhXrfTsCuR4XYIdnyN3k7vZb8xmQ9uf7jqm6Q_8WU790Q7_063sSiFarPq8keL8LmbI1wkk_anp8EllhQ6Riyy33ZtHugE3-VVVGMXdT6_o7isjkHnheM4pGU0IMTByVQLLFxZ2YwPsmsdiZL4ettyCLT6P5o9oPI2_k_wtE_FyoXFMpuRwzHEaS-8sDGuSaDbS1V6NxvTmgIAQiA



查看集群节点

@·K8s常用命令

一、kubectl
kubectl 是用于运行 Kubernetes 集群命令的管理工具。

1、 查看集群状态

kubectl version --short=true        #查看客户端及服务端程序版本信息
kubectl cluster-info                #查看集群信息

2、 创建资源对象

kubectl run name --image=(镜像名) --replicas=(备份数) --port=(容器要暴露的端口) --labels=(设定自定义标签)
kubectl create -f **.yaml       #陈述式对象配置管理方式
kubectl apply -f **.yaml        #声明式对象配置管理方式(也适用于更新等)

3、 查看资源对象

kubectl get namespace        #查看命名空间
kubectl get pods,services -o wide (-o 输出格式 wide 表示 plain-text)
kubectl get pod -l "key=value,key=value" -n kube-system (-l 标签选择器(多个的话是与逻辑), -n 指定命名空间,不指定默认 default)
kubectl get pod -l "key1 in (val1,val2),!key2" -L key (-l 基于集合的标签选择器, -L 查询结果显示标签) 注意: 为了避免和 shell 解释器解析!,必须要为此类表达式使用单引号
kubectl get pod -w(-w 监视资源变动信息)

4、 打印容器中日志信息

kubectl logs name -f -c container_name -n kube-system (-f 持续监控, -c 如果 pod 中只有一个容器不用加)

5、 在容器中执行命令

kubectl exec name -c container_name -n kube-system -- 具体命令
kubectl exec -it pod_name /bin/sh           #进入容器的交互式 shell

6、 删除资源对象

kubectl delete [pods/services/deployments/...] name      #删除指定资源对象
kubectl delete [pods/services/deployments/...] -l key=value -n kube-system 删 除kube-system #下指定标签的资源对象
kubectl delete [pods/services/deployments/...] --all -n kube-system #删除 kube-system 下所有资源对象
kubectl delete [pods/services/deployments/...] source_name --force --grace-period=0 -n
kube-system             #强制删除 Terminating 的资源对象
kubectl delete -f xx.yaml
kubectl apply -f xx.yaml --prune -l <labels>(一般不用这种方式删除)
kubectl delete rs rs_name --cascade=fale   #(默认删除控制器会同时删除其管控的所有 Pod对象, 加上 cascade=false 就只删除 rs)

7、 更新资源对象

kubectl replace -f xx.yaml --force(--force 如果需要基于此前的配置文件进行替换, 需要加
上 force)

8、 将服务暴露出去(创建 Service)

kubectl expose deployments/deployment_name --type="NodePort" --port=(要暴露的容
器端口) --name=(Service 对象名字)

9、 扩容和缩容

kubectl scale deployment/deployment_name --replicas=N
kubectl scale deployment/deployment_name --replicas=N --current-replicas=M
#只有当前副本数等于 M 时才会执行扩容或者缩容

10、 查看 API 版本

kubectl api-versions

11、 在本地主机上为 API Server 启动一个代理网关

kubectl proxy --port=8080
#之后就可以通过 curl 来对此套字节发起访问请求
curl localhost:8080/api/v1/namespaces/ | jq .items[].metadata.name (jq 可以对 json 进行
过滤)

12、 当定义资源配置文件时, 不知道怎么定义的时候,可以查看某类型资源的配置字段解释

kubectl explain pods/deployments/...(二级对象可用类似于 pods.spec 这种方式查看)

13、 查看某资源对象的配置文件

kubectl get source_type source_name -o yaml --export(--export 表示省略由系统生成的信
息) 后面加 > file.yaml 就可以快速生成一个配置文件了

14、 标签管理相关命令

kubectl label pods/pod_name key=value       #添加标签,如果是修改的话需要后面添加--overwrite
kubectl label nodes node_name key=value    #给 工 作 节 点 添 加 标 签 , 后 续 可 以 使 用nodeSelector 来指定 pod 被调度到指定的工作节点上运行

15、 注解管理相关命令

kubectl annotate pods pod_name key=value

16、 patch 修改 Deployment 控制器进行控制器升级

kubectl patch deployment deployment-demo -p '{"spec": {"minReadySeconds": 5}}'(-p 以补丁形式更新补丁形式默认是 json)
kubectl set image deployments deployment-demo myapp=ikubernetes/myapp:v2           #修改depolyment 中的镜像文件
kubectl rollout status deployment deployment-demo                                   #打印滚动更新过程中的状态信息
kubectl get deployments deployment-demo --watch                                     #监控 deployment 的更新过程
kubectl kubectl rollout pause deployments deployment-demo                           #暂停更新
kubectl rollout resume deployments deployment-demo                                  #继续更新
kubectl rollout history deployments deployment-demo                                 #查看历史版本(能查到具体的历史需要在 apply 的时候加上--record 参数)
kubectl rollout undo deployments deployment-demo --to-revision=2                   #回滚到指定版本, 不加--to-version 则回滚到上一个版本

17、 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间

kubectl get pod
kubectl get pod -n kubekubectl get pod -o wide

18、 查看 RC 和 service 列表, -o wide 查看详细信息

kubectl get rc,svc
kubectl get pod,svc -o wide
kubectl get pod <pod-name> -o yaml

19、 显示 Node 的详细信息

kubectl describe node 节点名

20、 显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志

kubectl describe pod <pod-name>

21、 根据 yaml 创建资源, apply 可以重复执行, create不行

kubectl create -f pod.yaml
kubectl apply -f pod.yaml

22、 基于 pod.yaml 定义的名称删除 pod

kubectl delete -f pod.yaml

23、 删除所有包含某个 label 的 pod 和 service

kubectl delete pod,svc -l name=<label-name>

24、 删除所有 Pod

kubectl delete pod --all

25、 查看 endpoint 列表

kubectl get endpoints

26、 执行 pod 的 date 命令

kubectl exec <pod-name> -- date
kubectl exec <pod-name> -- bash
kubectl exec <pod-name> -- ping 10.24.51.8

27、 通过 bash 获得 pod 中某个容器的 TTY, 相当于登录容器

kubectl exec -it <pod-name> -c <container-name> -- bash

28、 查看容器的日志

kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时查看日志
kubectl log <pod-name> -c <container_name> # 若 pod 只有一个容器, 可以不加 -c

29、 查看注释

kubectl explain pod
kubectl explain pod.apiVersion

30、 查看节点

kubectl get node --show-labels
kubectl get nodes

项目四 CentOS使用kubeadm部署工具部署测试环境的K8s集群---Kubectl命令使用以及安装dashboard界面相关推荐

  1. [错误解决]centos中使用kubeadm方式搭建一个单master的K8S集群

    安装步骤 参考该大佬博客 --------- [ningan@k8s-master pv]$ kubectl get pod The connection to the server localhos ...

  2. kubeadm部署k8s集群

    1.准备环境 虚拟机操作系统: Centos7 角色                IP Master        192.168.150.140 Node1        192.168.150. ...

  3. 【Kubernetes】如何使用Kubeadm部署K8S集群

    一 . 准备机器 本次环境采用华为云ECS弹性云服务器部署(也可以使用VMware) vm01(2V4G): Ubuntu_18.04作为K8S master节点 vm02(1V1G): Ubuntu ...

  4. 实战:部署一套完整的企业级高可用K8s集群(成功测试-博客输出)-20211019

    目录 文章目录 目录 实验环境 实验软件 一.基础环境配置**(all节点均要配置)** 二.部署Nginx+Keepalived高可用负载均衡器**(只需在2个master节点配置即可)** 1.安 ...

  5. K8S集群应用市场安装部署:第一篇

    这里是引用 操作系统要求 服务器配置信息 基础环境部署 3.1. NTP时钟源同步 3.2. 关闭firewalld服务 3.3. 关闭SElinux服务 3.4. 系统调优配置 3.5. 开启IP转 ...

  6. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 文章目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 k ...

  7. k8s集群部署 | 三节点(复用)高可用集群过程参考

    文章目录 1. kubeadm 部署三节点(复用)高可用 k8s 集群 1.1 环境规划阶段 1.1.1 实验架构图 1.1.2 系统版本说明 1.1.3 环境基本信息 1.1.4 k8s 网段划分 ...

  8. Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务

     前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for desktop中启用 ...

  9. k8s集群部署 | 二进制三节点(复用)高可用集群部署过程

    文章目录 1. 二进制部署三节点(复用)高可用 k8s 集群 1.1 环境规划阶段 1.1.1 实验架构图 1.1.2 系统版本说明 1.1.3 环境基本信息 1.1.4 k8s 网段划分 1.2 基 ...

最新文章

  1. POS 客显 设备 显示 总价 单价 找零 收款 C# SerialPort 法
  2. Windows Phone 开发起步之旅之二 C#中的值类型和引用类型
  3. Android dp转px,sp转px
  4. 信息学奥赛一本通 1911:【00NOIP普及组】税收与补贴问题 | 洛谷 P1023 [NOIP2000 普及组] 税收与补贴问题
  5. 想换行做 5G 的开发者到底该咋办?
  6. 程序员的自我修养(序)-量子
  7. 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接---个人整理
  8. 2021年国内外离线下载服务全面评测与总结
  9. JSP传参 input隐藏域
  10. windows 系统arp命令
  11. [Java]String类基础知识与常用方法总结
  12. 灵活高效PDF转Word工具
  13. Perforce使用中文教程: p4 client
  14. ros入门保姆级教程之召唤小乌龟
  15. pythonista免费下载-pythonista 3ios
  16. (10)stata的基本使用--短面板数据处理
  17. 陈玉丹:初学者入门《网络推广》必学内容
  18. VM虚拟机adb调试手机
  19. OPC通讯的安全防护
  20. 12种打电话占便宜省钱方案

热门文章

  1. 基于SFM的三维重建点云合并及位移测量
  2. html插入cad,如何在CAD图纸中插入一张Excel数据表格?
  3. 【前置句与倒装句练习题】地点/方向提前的倒装
  4. 基于vue框架下使用Element-UI获取文件MD5值并上传
  5. 高智商翻木块java_高智商游戏翻木块
  6. 商务统计学基础:从不确定性到人工智能
  7. shader卡通渲染
  8. 弱电计算机网络安装注意点,弱电机房施工规范.doc
  9. 小米战略入股TCL集团,不只是为了0.48%的股份 1
  10. 系统架构师笔记——计算机网络