Docker+K8S+DevOps微服务架构师
学神IT教育:从零基础到实战,从入门到精通!版权声明:
免责声明: 本课程设计目的只用于教学,切勿使用课程中的技术进行违法活动,学员利用课程中的技术进行违法活动,造成的后果与讲师本人及讲师所属机构无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
本系列文档为《学神IT教育》内部使用教材和教案,只允许VIP学员个人使用,禁止私自传播。否则将取消其VIP资格,追究其法律责任,请知晓!
联系方式:
学神IT教育官方网站: http://www.xuegod.cn
学神K8S精英学习11群QQ群: 957231097
微信扫码添加学习顾问微信,同时扫码关注学神公众号了解最新行业动态,获取更多学习资料及答疑就业服务!
第十章 使用kubeadm搭建K8S容器集群管理系统
本节所讲内容:
10.1 Kubernetes简介
10.2 使用kubeadm部署Kubernetes集群
10.3 实战-安装kubernetes-dashboard-2.0
10.4 实战-node节点加入集群
10.5 实战-通过kubernetes-dashboard创建容器
10.1 Kubernetes简介
10.1.1 Kubernetes概述
Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。 Kubernetes基于docker容器的云平台,简写成:k8s
官方网站非常友好,为数不多的的国外技术网站支持中文的。
10.1.2 Kubernetes组件介绍
Kubernetes 中的绝大部分概念都抽象成 Kubernetes 管理的一种资源对象,常见的资源对象如下:
Pod: Pod 是 Kubernetes 最基本的部署调度单元。每个 Pod 可以由一个或多个业务容器和一个根容器(Pause 容器)组成。一个 Pod 表示某个应用的一个实例

10.1.3 Kubernetes 运行机制
用户通过 API 创建一个 Pod
apiserver 将其写入 etcd
scheduluer 检测到未绑定 Node 的 Pod,开始调度并更新 Pod 的 Node 绑定
kubelet 检测到有新的 Pod 调度过来,通过 container runtime 运行该 Pod
kubelet 通过 container runtime 取到 Pod 状态,并更新到 apiserver 中
10.2 使用kubeadm部署Kubernetes集群
10.2.1 初始化集群环境
环境说明(centos7.6):
IP 主机名 角色 内存
192.168.1.63 xuegod63.cn master 4G
192.168.1.64 xuegod64.cn worker 4G
192.168.1.62 xuegod64.cn worker 4G
配置互信
生成ssh 密钥对
[root@xuegod63 ~]# ssh-keygen #一路回车,不输入密码
把本地的ssh公钥文件安装到远程主机对应的账户
[root@xuegod63 ~]# ssh-copy-id 192.168.1.63
[root@xuegod63 ~]# ssh-copy-id 192.168.1.62
[root@xuegod63 ~]# ssh-copy-id 192.168.1.64
所有节点都关闭防火墙和selinux
[root@xuegod63 ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@xuegod62 ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@xuegod64 ~]# systemctl stop firewalld ; systemctl disable firewalld
3台服务器的selinux都关闭
[root@xuegod63 ~]# setenforce 0
[root@xuegod63 ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
[root@xuegod62 ~]# setenforce 0
[root@xuegod62 ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
[root@xuegod64 ~]# setenforce 0
[root@xuegod64 ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
关闭swap分区。
如果不关闭,初始化k8s时,会报以下错误:
Kubelet: Running with swap on is not supported, please disable swap! or set —fail-swap-on flag to false.[root@xuegod63 ~]# swapoff -a
[root@xuegod63 ~]# free -m #可以看到swap分区的大小,已经变为0
total used free shared buff/cache available
Mem: 5806 176 5430 12 198 5379
Swap: 0 0 0
关闭swap分区。
[root@xuegod63 ~]# swapoff -a
[root@xuegod62 ~]# swapoff -a
[root@xuegod64 ~]# swapoff -a
永久关闭:注释swap挂载
[root@xuegod63 ~]# vim /etc/fstab #给swap这行开头加一下注释#
[root@xuegod62 ~]# vim /etc/fstab
[root@xuegod64 ~]# vim /etc/fstab
注:如果是克隆主机请删除网卡中的UUID并重启网络服务。
内核参数修改:br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。
[root@xuegod63 ~]# modprobe br_netfilter
[root@xuegod63 ~]# echo “modprobe br_netfilter” >> /etc/profile
[root@xuegod63 ~]# 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
[root@xuegod63 ~]# sysctl -p /etc/sysctl.d/k8s.conf
[root@xuegod62 ~]# modprobe br_netfilter
[root@xuegod62 ~]# echo “modprobe br_netfilter” >> /etc/profile
[root@xuegod62 ~]# 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
[root@xuegod62 ~]# sysctl -p /etc/sysctl.d/k8s.conf
[root@xuegod64 ~]# modprobe br_netfilter
[root@xuegod64 ~]# echo “modprobe br_netfilter” >> /etc/profile
[root@xuegod64 ~]# 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
[root@xuegod64 ~]# sysctl -p /etc/sysctl.d/k8s.conf
在xuegod63上配置kubeadm、docker-ce的离线yum源[root@xuegod63 ~]# tar xf k8s-docker.tar.gz -C /opt/
[root@xuegod63 ~]# tee /etc/yum.repos.d/k8s-docker.repo << ‘EOF’
[k8s-docker]
name=k8s-docker
baseurl=file:///opt/k8s-docker
enabled=1
gpgcheck=0
EOF
配置xuegod62 上配置kubeadm、docker-ce的离线yum源:[root@xuegod63 ~]# scp /etc/yum.repos.d/k8s-docker.repo 192.168.1.62:/etc/yum.repos.d/
k8s-docker.repo 100% 80 19.5KB/s 00:00
[root@xuegod63 ~]# scp -r /opt/k8s-docker/ 192.168.1.62:/opt/
配置xuegod64 上配置kubeadm、docker-ce的离线yum源:[root@xuegod63 ~]# scp /etc/yum.repos.d/k8s-docker.repo 192.168.1.64:/etc/yum.repos.d/
k8s-docker.repo 100% 80 19.5KB/s 00:00
复制yum源所需软件包到xuegod64
[root@xuegod63 ~]# scp -r /opt/k8s-docker/ 192.168.1.64:/opt/
在master和node上安装kubeadm组件,用于后期安装k8s使用,现在还没有安装k8s,注意安装kubelet的软件包在我们离线yum源中已经包含,可以直接安装,如需安装其他版本k8s可以配置在线源进行安装。
[root@xuegod63 ~]# yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4
[root@xuegod63 ~]# systemctl enable kubelet && systemctl start kubelet
[root@xuegod62 ~]# yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4
[root@xuegod62 ~]# systemctl enable kubelet && systemctl start kubelet
[root@xuegod64 ~]# yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4
[root@xuegod64 ~]# systemctl enable kubelet && systemctl start kubelet
注:每个软件包的作用
kubelet :运行在集群所有节点上,用于启动Pod和容器等对象的工具 kubeadm :用于初始化集群,启动集群的命令工具 kubectl :用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件 扩展:方法2:在线源配置方法: 配置阿里云Kubernetes yum源 [root@xuegod63 ~]# tee /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 EOF 然后,再执行下面命令,使用在线yum源安装kubeadm和kubelet 将xuegod63上Kubernetes的yum源复制给xuegod64 [root@xuegod63 ~]# scp /etc/yum.repos.d/kubernetes.repo 192.168.1.64:/etc/yum.repos.d/ 在线源安装一定要指定版本,否则安装最新版,软件版本要和将要安装的k8s集群版本一致。 [root@xuegod63 ~]# yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4 [root@xuegod63 ~]# systemctl enable kubelet && systemctl start kubelet [root@xuegod64 ~]# yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4 [root@xuegod64 ~]# systemctl enable kubelet && systemctl start kubelet 在xuegod63上安装docker-ce。我们已经配置了docker本地源,直接安装docker-ce服务。[root@xuegod63 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
安装docker-ce
[root@xuegod63 ~]# yum install docker-ce docker-ce-cli containerd.io -y
[root@xuegod63 ~]# systemctl start docker && systemctl enable docker
添加阿里云镜像加速地址并修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认则为systemd,两者必须一致才可以。
拓展:docker文件驱动systemd
Cgroups 是 linux 内核提供的一种机制,如果你还不了解 cgroups,请参考《Linux cgroups 简介》先了解 cgroups。当 Linux 的 init 系统发展到 systemd 之后,systemd 与 cgroups 发生了融合(或者说 systemd 提供了 cgroups 的使用和管理接口,systemd 管的东西越来越多啊!)。
Systemd 依赖 cgroups
要理解 systemd 与 cgroups 的关系,我们需要先区分 cgroups 的两个方面:层级结构(A)和资源控制(B)。首先 cgroups 是以层级结构组织并标识进程的一种方式,同时它也是在该层级结构上执行资源限制的一种方式。我们简单的把 cgroups 的层级结构称为 A,把 cgrpups 的资源控制能力称为 B。
对于 systemd 来说,A 是必须的,如果没有 A,systemd 将不能很好的工作。而 B 则是可选的,如果你不需要对资源进行控制,那么在编译 Linux 内核时完全可以去掉 B 相关的编译选项。
[root@xuegod63 ~]# tee /etc/docker/daemon.json << ‘EOF’
{
“registry-mirrors”: [“https://rncxm540.mirror.aliyuncs.com“],
“exec-opts”: [“native.cgroupdriver=systemd”]
}
EOF
[root@xuegod63 ~]# systemctl daemon-reload
[root@xuegod63 ~]# systemctl restart docker
在xuegod62上安装docker-ce。我们已经配置了docker本地源,直接安装docker-ce服务。[root@xuegod62 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
安装docker-ce
[root@xuegod62 ~]# yum install docker-ce docker-ce-cli containerd.io -y
[root@xuegod62 ~]# systemctl start docker && systemctl enable docker.service
[root@xuegod62 ~]# tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://rncxm540.mirror.aliyuncs.com“],
“exec-opts”: [“native.cgroupdriver=systemd”]
}
EOF
[root@xuegod62 ~]# systemctl daemon-reload && systemctl restart docker
在xuegod64上安装docker-ce。我们已经配置了docker本地源,直接安装docker-ce服务。[root@xuegod64 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
安装docker-ce
[root@xuegod64 ~]# yum install docker-ce docker-ce-cli containerd.io -y
[root@xuegod64 ~]# systemctl start docker && systemctl enable docker.service
[root@xuegod64 ~]# tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://rncxm540.mirror.aliyuncs.com“],
“exec-opts”: [“native.cgroupdriver=systemd”]
}
EOF
[root@xuegod64 ~]# systemctl daemon-reload
[root@xuegod64 ~]# systemctl restart docker
10.2.2 使用kubeadm初始化集群
在xuegod63上,离线导入docker镜像。3台机器都导入一下,避免node节点找不到镜像。
[root@xuegod63 ~]# docker load -i k8s-images-v1.20.4.tar.gz #我已经把所有k8s镜像,都导成一个包了。
[root@xuegod63 ~]# gzip -dc k8s-images-v1.20.4.tar.gz |ssh root@192.168.1.64 ‘cat | docker load’
[root@xuegod63 ~]# gzip -dc k8s-images-v1.20.4.tar.gz |ssh root@192.168.1.62 ‘cat | docker load’
注:gzip 参数: -c 将输出写到标准输出上,并保留原有文件。-d 将压缩文件解压。
使用kubeadm初始化k8s集群
[root@xuegod63 ~]# kubeadm init —kubernetes-version=1.20.4 \
—apiserver-advertise-address=192.168.1.63 \
—image-repository registry.aliyuncs.com/google_containers \
—service-cidr=10.10.0.0/16 —pod-network-cidr=10.122.0.0/16
注:—image-repository registry.aliyuncs.com/google_containers为保证拉取镜像不到国外站点拉取,手动指定仓库地址为registry.aliyuncs.com/google_containers。kubeadm默认从k8ss.grc.io拉取镜像。 我们本地有导入到的离线镜像,所以会优先使用本地的镜像。
安装完成。
节点注册命令我们保存下来稍后我们需要
kubeadm join 192.168.1.63:6443 —token rgz2ww.cmx4k1otzsizgzf2 \
--discovery-token-ca-cert-hash sha256:d8870af95b20d2c3aef441994603f3e1d71a5edde1b038df1e0f0c8754a43ecb
总结: 安装k8s过程
1、安装docker yum install docker-ce
2、安装kubeadm yum install kubeadm
3、使用kubeadm初始化k8s集群 kubeadm init 配置kubectl的配置文件,保存一个证书,这样kubectl命令可以使用这个证书对k8s集群进行管理 [root@xuegod63 ~]# mkdir -p $HOME/.kube [root@xuegod63 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@xuegod63 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config [root@xuegod63 ~]# kubectl get nodes
2.可扩展性
Calico 使用与 Internet 类似的方案,Internet 的网络比任何数据中心都大,Calico 同样天然具有可扩展性。
3.简单而更容易 debug
因为没有隧道,意味着 workloads 之间路径更短更简单,配置更少,在 host 上更容易进行 debug 调试。
4.更少的依赖
Calico 仅依赖三层路由可达。
5.可适配性
Calico 较少的依赖性使它能适配所有 VM、Container或者混合环境场景。
10.3.2 k8s组网方案对比
flannel方案: 需要在每个节点上把发向容器的数据包进行封装后,再用隧道将封装后的数据包发送到运行着目标Pod的node节点上。目标node节点再负责去掉封装,将去除封装的数据包发送到目标Pod上。数据通信性能则大受影响 Overlay方案:在下层主机网络的上层,基于隧道封装机制,搭建层叠网络,实现跨主机的通信;Overlay无疑是架构最简单清晰的网络实现机制,但数据通信性能则大受影响。 calico方案:在k8s多个网路解决方案中选择了延迟表现最好的-calico方案 总结:Flannel网络非常类似于Docker网络的Overlay驱动,基于二层的层叠网络。 层叠网络的优势: 1.对底层网络依赖较少,不管底层是物理网络还是虚拟网络,对层叠网络的配置管理影响较少; 2.配置简单,逻辑清晰,易于理解和学习,非常适用于开发测试等对网络性能要求不高的场景。 层叠网络的劣势: 1.网络封装是一种传输开销,对网络性能会有影响,不适用于对网络性能要求高的生产场景; 2.由于对底层网络结构缺乏了解,无法做到真正有效的流量工程控制,也会对网络性能产生影响; 3.某些情况下也不能完全做到与下层网络无关,例如隧道封装会对网络的MTU限制产生影响。 Calico,就是非层叠网络: Calico网络的优势 1.没有隧道封装的网络开销; 2.相比于通过Overlay构成的大二层层叠网络,用iBGP构成的扁平三层网络扩展模式更符合传统IP网络的分布式结构; 3.不会对物理层网络的二层参数如MTU引入新的要求。 Calico网络的劣势: 1.最大的问题是不容易支持多租户,由于没有封装,所有的虚拟机或者容器只能通过真实的IP来区分自己,这就要求所有租户的虚拟机或容器统一分配一个地址空间;而在典型的支持多租户的网络环境中,每个租户可以分配自己的私有网络地址,租户之间即使地址相同也不会有冲突; 2.不容易与其他基于主机路由的网络应用集成。 注:总结:calico 提供一种不同物理机之间,docker容器高速通信的组网方案10.3.2 了解一下Calico架构图
有兴趣的同学,可以了解一下:Calico网络模型主要工作组件:
1.Felix:运行在每一台 Host 的 agent 进程,主要负责网络接口管理和监听、路由、ARP 管理、ACL 管理和同步、状态上报等。felix [ˈfiːlɪks] 费力克斯制导炸弹
2.etcd:分布式键值存储,相当于k8s集群中的数据库,存储着Calico网络模型中IP地址等相关信息。
3.BGP Client(BIRD):Calico 为每一台 Host 部署一个 BGP Client,即每台host上部署一个BIRD。BIRD 是一个单独的持续发展的项目,实现了众多动态路由协议比如 BGP、OSPF、RIP 等。在 Calico 的角色是监听 Host 上由 Felix 注入的路由信息,然后通过 BGP 协议广播告诉剩余 Host 节点,从而实现网络互通。
4.BGP Route Reflector:在大型网络规模中,如果仅仅使用 BGP client 形成 mesh 全网互联的方案就会导致规模限制,因为所有节点之间俩俩互联,需要 N^2 个连接,为了解决这个规模问题,可以采用 BGP 的 Router Reflector 的方法,使所有 BGP Client 仅与特定 RR 节点互联并做路由同步,从而大大减少连接数。[meʃ] Reflector [rɪˈflektə(r)] 反射器
10.3.3 安装Calico网络组件
上传calico.yaml到linux中,使用yaml文件安装calico 网络插件 。
[root@xuegod63 ~]# kubectl apply -f /root/calico.yaml
注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml
拉取镜像需要一定时间,所以我们查看pod状态为running则安装成功。
[root@xuegod63 ~]# kubectl get pod —all-namespaces
再次查看集群状态。
[root@xuegod63 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
xuegod63.cn Ready control-plane,master 26m v1.20.4
10.4 实战-安装kubernetes-dashboard-2.0
kubernetes-dashboard2.0 yaml文件地址:
https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
很多时候官方的资源我们不能够直接访问,可以通过浏览器访问并使用ctrl+s进行保存,然后上传使用。
修改yaml文件,默认的dashboard是没有配置NodePort的映射的。
[root@xuegod63 ~]# vim recommended.yaml
在第42行下方添加2行
nodePort: 30000 type: NodePort 增加完后,如下:添加dashboard管理员用户凭证,在原文件中追加以下内容:
[root@xuegod63 ~]# cat >> recommended.yaml << EOF
—- # —————————- dashboard-admin —————————- # apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard —- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminEOF
配置文件详解:
安装dashboard
[root@xuegod63 ~]# kubectl apply -f recommended.yaml
[root@xuegod63 ~]# kubectl get pods —all-namespaces
查看登录令牌
[root@xuegod63 ~]# kubectl describe secrets -n kubernetes-dashboard dashboard-admin
token: 浏览器登录时使用以下token进行登录。
eyJhbGciOiJSUzI1NiIsImtpZCI6ImJmT29jQ2U5aXZCbm5aMkNlQklrVkFIVXpoUGVTeUIzb0FyYkU5eURCY2cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tZmM1eDkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMzY2ZGY5ZjAtNzM5Yi00YTYwLTk5YjQtMDE2YTE1MTdjNWExIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.WgNoJNqgkO0DJdPXVKHORMqtaru1lhLwO-dA0bkChQ_gkAUfPYHgaNBP_8dHeHup9Kng-9ns21t7ENlzufKvPLk7UJSeBP6kYEPNG-pyIZ8HmwJdg2C55raMGccLTW8Hd5Dwfy5Ejae894yY_RYTiHmAXUHgEVuKtPsootIJyKNGgF1TtsaJgmegjjkK8z-w9mIKw4D86W6Gi_5NDsr-bC3LVIm-SliqL9FR9lhp4b7-SpDA3pNuuzltnfeKPF1Th1ApNvGEVTXT05LkKiFvtDuYAV80am6J5-S1Z435362HxedCygsL6yqz4AeNXAPp2-m6kmLtOXB6-RhPsWlQ
访问web界面(推荐使用Firefox浏览器)
使用token登录
首次登陆可能会比较慢,请勿反复刷新页面。
10.5 实战-node节点加入集群
10.5.1 将node节点加入到集群中
在xuegod63上查看加入节点的命令:
[root@xuegod63 ~]# kubeadm token create —print-join-command
W0724 16:56:47.860390 28055 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.63:6443 —token s6f1ab.g6s71a2gn4d9pq5v \ —discovery-token-ca-cert-hash sha256:30092f3fd915c48b67695b8242a6196aebdde3a21c3bc521a8936bd628e30b0f把xuegod62加入k8s集群:
[root@xuegod64 ~]# kubeadm join 192.168.1.63:6443 —token s6f1ab.g6s71a2gn4d9pq5v \
—discovery-token-ca-cert-hash sha256:30092f3fd915c48b67695b8242a6196aebdde3a21c3bc521a8936bd628e30b0f
把xuegod64加入k8s集群:
[root@xuegod64 ~]# kubeadm join 192.168.1.63:6443 —token s6f1ab.g6s71a2gn4d9pq5v \
—discovery-token-ca-cert-hash sha256:30092f3fd915c48b67695b8242a6196aebdde3a21c3bc521a8936bd628e30b0f
互动:如何在普通的node节点上查看集群状态?
将xuegod63证书导入到xuegod64上,这样在xuegod64才可以使用kubectl命令管理k8s
[root@xuegod64 ~]# mkdir ~/.kube
拷贝xuegod63的配置文件到xuegod64
[root@xuegod63 ~]# scp ~/.kube/config 192.168.1.64:/root/.kube/
[root@xuegod64 ~]# kubectl get nodes
可以看到xuegod64和xuegod62的ROLES角色为空,我们可以手工搭上标签,这里不影响集群正常工作。
要xuegod64或xuegod63上给:xuegod64和xuegod62打上标签。不在能xuegod62上操作,因为xueogd62没有执行kubectl的权限。[root@xuegod64 ~]# kubectl label node xuegod62.cn node-role.kubernetes.io/worker=worker
[root@xuegod64 ~]# kubectl label node xuegod64.cn node-role.kubernetes.io/worker=worker
10.5.2 离线docker镜像包制作方法
技巧1:工作中,如果想把物理机上所有镜像导出,制作成docker镜像离线包,可以使用以下命令
[root@xuegod63 ~]# docker save docker images | cut -f1 -d ' ' | sed -n '2,$p'
|gzip > k8s-images-v1.20.4.tar.gz
cut 参数 -f1 打印第1列, -d‘ ’ 以空格作为分隔符
sed 命令参数 -n :只打印匹配的行 ; sed的编辑命令参数 p 打印匹配行,和-n一起合用
技巧2:如果想把整个集群中所有机器上的镜像,都打包成一个镜像,可以执行以下命令
docker save 镜像名 | gzip |ssh root@192.168.1.63 ‘cat | docker load’
1、先将node节点上所有镜像远程导入到master上:
[root@xuegod64 ~]# docker save docker images | cut -f1 -d ' ' | sed -n '2,$p'
| gzip |ssh root@192.168.1.63 ‘cat | docker load’
2、master上拥有所有docker镜像后,再在master上,把镜像统一导出一下
[root@xuegod63 ~]# docker save docker images | cut -f1 -d ' ' | sed -n '2,$p'
|gzip > k8s-images-v1.20.4.tar.gz
注:我就是这样,把集群中的所有镜像,打包成一个包的。方便后期使用
10.6 实战-通过kubernetes-dashboard创建容器
10.6.1 通过kubernetes-dashboard创建容器
web界面点击+进行创建pod
创建nginx pod
点“Deploy”开始部署。
注:应用名称:nginx
容器镜像:nginx
pod数量:2
service: external 外部网络
端口(port):3000 目标端口(targetport):80
注:表单中创建pod时没有创建nodeport的选项,会自动创建在30000+以上的端口。
关于port、targetport、nodeport的说明:
nodeport是集群外流量访问集群内服务的端口,比如客户访问nginx,apache,
port是集群内的pod互相通信用的端口类型,比如nginx访问mysql,而mysql是不需要让客户访问到的,port是service的的端口
targetport目标端口,也就是最终端口,也就是pod的端口。
已经创建成功:
查看分配的nodeport端口
浏览器访问:http://192.168.1.63: 30151/ ,http://192.168.1.62:30151/,http://192.168.1.64:30151/
注:访问xuegod63,xuegod62,xuegod64都是可以的。
总结:
10.1 Kubernetes简介
10.2 使用kubeadm部署Kubernetes集群
10.3 实战-安装kubernetes-dashboard-2.0
10.4 实战-node节点加入集群
10.5 实战-通过kubernetes-dashboard创建容器