目录

一.k8s概述

1.k8s是什么

2.K8S是做什么用的?

3.为什么要使用K8S?

4.k8s架构图解

5.角色与功能

1)Master管理节点(管理节点)

2)node计算节点

6.master节点服务

1)API Server

2)Scheduler

3)Controller manager

4)etcd的概述

5)服务端口

7.计算节点node概述

二.私有镜像仓库

1.基础了解

1)安装部署方式

2)官方工具kubeadm的方式安装

3)部署环境要求

2.安装仓库

1)客户端仓库配置文件概述

2)安装仓库

3)使用脚本初始化仓库

3.客户端使用仓库

三.kubernetes 安装

1.环境准备

2.安装master

1)安装部署工具

2)master软件包概述

3)安装工具软件包并指定私有镜像仓库

4)Tab键设置

5)下载kubernetes的镜像

6)安装IPVS负载均衡与概述

7)配置master主机环境

8)使用kubeadm部署

9)验证安装结果

3.node节点加入集群

1)node节点如何加入集群

2)token管理

3)获取token与删除token

4)创建token

5)获取token_hash

6)node安装

4.k8s网络插件安装配置

1)flannel概述

2)准备资源

3)修改配置文件并安装

4)验证结果


一.k8s概述

K8s 是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能

1.k8s是什么

  • Kubernetes的名字来自希腊语,意思是舵手或领航员。K8s是将k和s之间的8个字母ubernete替换为8的缩写。

  • K8S的创造者,是众人皆知的行业巨头一一Google。

  • K8S并不是一件全新的发明,他是Google10多年大规模容器管理技术Borg的开源版本。

  • 2014年6月K8S由Goog le公司正式公布出来并宣布开源。

2.K8S是做什么用的?

  • 就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的

  • 编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker 及容器进行更高级更灵活的管理,就在这个时候,K8S出现了

  • K8s是容器集群管理系统,是一个开源的平台,可以实现容.器集群的自动化部署、自动扩缩容、维护等功能

3.为什么要使用K8S?

-有大量跨主机的容器需要管理

-快速部署应用

-快速扩展应用

-无缝对接新的应用功能,

-节省资源,优化硬件资源的使用

4.k8s架构图解

核心角色

-master(管理节点)

-node(计算节点)

-image(镜像仓库)

5.角色与功能

1)Master管理节点(管理节点)

-Master提供集群的控制

-对集群进行全局决策

-检测和响应集群事件

-Master主要由 apiserver, kubproxy, scheduler, controller manager 和etcd服务组成

2)node计算节点

-运行容器的实际节点

-维护运行Pod,并提供具体应用的运行环境

-node有kubelet,kube-poxy和docker组成

-计算节点被设计成水平扩展,该组件在多个节点运行

6.master节点服务

1)API Server

  • 是整个系统的对外接口,供客户端和其它组件调用

  • 后端元数据存储于etcd中(键值数据库)

2)Scheduler

负责对集群内部的资源进行调度,相当于“调度室”

3)Controller manager

负责管理控制器,相当于“大总管”

4)etcd的概述

kubernet在运行过程中产生的元数据全部存储在etcd键值数据库中

etcd的定义

etcd 是Core0S团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value) 数据库,基于Go语言实现。在分布式系统中,各种服务的配置信息的管理分享,服务的发现是一个很基本同时也是很重要的问题。CoreOS项目就希望基于etcd 来解决这一问题。

kubernetes在运行过程中产生的元数据全部存储在etcd中

etcd键值管理

  • 在键的组织上etcd采用了层次化的空间结构(类似于文件 系统中目录的概念),用户指定的键可以为单独的名字

  • 如创建key键值, 此时实际上放在根目录/key下面

  • 也可以为指定目录结构, 如/dir1/dir2/key, 则将创建相 应的目录结构

  • etcd有kubernet es集群自动管理, 用户无需手动干预

  • etcdctl是etcd的客户端管理程序

5)服务端口

协议 端口范围 软件 用途
TCP 6443 kube-apiserver 所有组件端口
TCP 2379-2380 etcd kube-api,etcd服务
TCP 10250 kubelet kubelet服务
TCP 10251 kube-scheduler kube-scheduler服务
TCP 10252 kube-controller-manager kube-controller-manager服务

7.计算节点node概述

1)node节点的服务概述

Docker服务:

容器管理工具

kubelet服务

负责监控Pod,包括创建,修改,删除等

kube-proxy服务

主要负责为pod对象提供代理

实现service(服务)的通信与负载均衡

2)pod的概述

  • Pod是Kuberbetes调度的基本单元

  • 一个Pod包涵1个或多个容器

  • 这些容器使用相同的网络命名空间和端口

  • Pod是一个服务的多个进程的聚合单位

  • Pod作为一个独立的部署单位,支持横向扩展和复制

一个pod就是一个容器组类似豆夹,而里面的容器或服务则是豆子

二.私有镜像仓库

1.基础了解

官网:https://kuberbetes.io/

官方下载地址: https://packages.cloud.google.com/

1)安装部署方式

  • 源码安装:下载源码或编译好的二进制,手工添加参数启动服务,kuberbetes采用证书认证方式,需要创建大量证书

  • 容器部署:官方把服务做成镜像,下载镜像,启动即可

2)官方工具kubeadm的方式安装

3)部署环境要求

-内核版本 >=3.10

-最低配置 2cpu,2G内存

-节点之中不可以有重复的主机名,MAC地址或product-uuid

-卸载防火墙 firewalld-*

-禁用 swap

-禁用 selinux

2.安装仓库

在docker进阶文档中有概述

1)客户端仓库配置文件概述

为docker配置私有仓库,和cgroup控制器

  • kubelet使用的cgroup控制器是systemd,而docker使用的是cgroupfs,必须设置成统一的(查询命令: docker info)

  • 配置文件/etc/ docker /daemon. json

2)安装仓库

# 准备好yum源并安装仓库服务
~]# yum makecache
~]# yum install -y docker-distribution
~]# systemctl enable --now docker-distribution

3)使用脚本初始化仓库

# 书写脚本
~]# vim init-img.sh
#!/bin/bash
# 安装docker
~]# yum install -y docker-ce
# 创建目录指定远程仓库(指定cgroup驱动,指定国内仓库,指定本地仓库:端口,名称)
~]# mkdir -p /etc/docker
~]# cat >/etc/docker/daemon.json <<'EOF'
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://hub-mirror.c.163.com"],"insecure-registries":["192.168.1.100:5000", "registry:5000"]
}
EOF
# docker重启并设置开机自启,导入docker进阶中commint创建的docker镜像
~]# systemctl enable --now docker.service
~]# systemctl restart docker.service
~]# docker load -i myos.tar.gz
​
# init apache images
~]# vim init-img.sh
# 制作一个apache镜像
#!/bin/bash
cat >Dockerfile<<'EOF'
FROM myos:latest
ENV  LANG=C
WORKDIR /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
EOF
docker build -t 172.17.0.98:5000/myos:httpd .
​
# init php-fpm images
# 制作一个php-fpm镜像
cat >Dockerfile<<'EOF'
FROM myos:latest
EXPOSE 9000
WORKDIR /usr/local/nginx/html
CMD ["/usr/sbin/php-fpm", "--nodaemonize"]
EOF
docker build -t 172.17.0.98:5000/myos:php-fpm .
​
# init nginx images
# 制作一个nginx镜像
cat >Dockerfile<<'EOF'
FROM myos:latest
EXPOSE 80
WORKDIR /usr/local/nginx/html
CMD  ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
EOF
docker build -t 172.17.0.98:5000/myos:nginx .
​
# upload images
# 删除dockerfile文件并给镜像打标签,上创仓库
rm -f Dockerfile
docker tag myos:latest 172.17.0.98:5000/myos:v1804
for i in v1804 httpd php-fpm nginx;dodocker push 192.168.1.100:5000/myos:${i}
done
​
# 创建目录执行脚本
~]# mkdir myos && cd myos
~]# chmod 755 init-img.sh
~]# ./init-img.sh
# 测试镜像(注意不能用“docker images”docker images 是看本地,curl才是看仓库)
​
~]# curl http://172.17.0.98:5000/v2/myos/tags/list
{"name":"myos","tags":["nginx","php-fpm","v1804","httpd"]}

3.客户端使用仓库

# 创建存放json文件目录
~]#  mkdir -p /etc/docker
~]# vim /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://hub-mirror.c.163.com"],"insecure-registries":["172.17.0.98:5000", "registry:5000"]
}
# 测试访问仓库
~]# curl http://172.17.0.98:5000/v2/myos/tags/list
{"name":"myos","tags":["httpd","php-fpm","nginx","v1804"]}
# 重启docker生效
~]# systemctl enable --now docker.service
~]# systemctl restart docker.service
# 测试拉取
~]# docker pull 172.17.0.98:5000/myos:httpd

三.kubernetes 安装

1.环境准备

按照如下配置准备服务器

-最低配置:2cpu,2G内存

-卸载防火墙firewalld-*

-禁用selinux和swap

-配置yum仓库,安装kubeadm,kubelet,kubectl,docker-ce

-配置docker私有镜像仓库和cgroup驱动(daemon.json)

-kuberbetes的master各个服务是运行在容器内的

-获取镜像的方式:

kubeadm config images list

2.安装master

1)安装部署工具

方法一

挂网下载地址:https://packages.cloud.google.com/

# 去官网把软件包下载到本地,并拷贝到yum仓库中
~]# cp -a v1.17.6/k8s-install /var/ftp/localrepo/
~]# cd /var/ftp/localrepo/
~]# createrepo --update .

方法二

# 导入阿里云的源
~]# 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
# 设置开机自启
~]# systemctl enable kubelet
# 列出所有版本

2)master软件包概述

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

  • kubelet:在集群中的每个节点上用来启动pod和容器的监控程序后台进程

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

  • docker:容器管理工具

3)安装工具软件包并指定私有镜像仓库

# 刷新缓存安装kubeadm、kubectl、kubelet、docker-ce
~]# yum makecache
~]# yum install -y kubeadm kubelet kubectl docker-ce
# 创建docker目录用来存放文件(指定cgroup启动器,与镜像仓库)
~]# mkdir -p /etc/docker
~]# vim /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://hub-mirror.c.163.com"],"insecure-registries":["172.17.0.98:5000", "registry:5000"]
}
# 启动docker与kubelet并设置开机自启
~]# systemctl enable --now docker kubelet
# 指定镜像仓库重启docker生效
~]# systemctl enable --now docker.service
~]# systemctl restart docker.service
​
# 查看cgroup的启动器
~]# docker info | grep Cgroup

4)Tab键设置

# 默认kubectl与kubeadm不支持Tab,所以要生成两个文件
~]# kubectl completion bash > /etc/bash_completion.d/kubectl
~]# kubeadm completion bash > /etc/bash_completion.d/kubeadm

5)下载kubernetes的镜像

# 先查看要哪些镜像,默认查看官网
~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.23.2
k8s.gcr.io/kube-controller-manager:v1.23.2
k8s.gcr.io/kube-scheduler:v1.23.2
k8s.gcr.io/kube-proxy:v1.23.2
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6
# 下载上面列出的所有镜像
~]# docker pull  xxx
# 注意此时是pull不下来的,该网站被国内禁了的,只有·找国内网站,要么科学上网
​
## 第一种方法下好放本地
# 这边提前下载好了
~]# mkdir k8s
~]# tar -xf k8s.tar -C k8s
~]# cd k8s/
~]# ls
coredns.tar.gz  kube-apiserver.tar.gz           kube-proxy.tar.gz      pause.tar.gz
etcd.tar.gz     kube-controller-manager.tar.gz  kube-scheduler.tar.gz
# 一键导入下好的镜像
~]# ls | xargs -i docker load -i {}
​
## 第二种用国内的
~]# kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
​
# 载入镜像
~]# docker load -i pause.tar.gz
# 打上标签,名称标签不能改(程序设定)(pause 3.1这就是名称标签)
~]# docker images
REPOSITORY       TAG  IMAGE ID       CREATED        SIZE
k8s.gcr.io/pause 3.1  da86e6ba6ca1   4 years ago    742kB
~]# docker tag k8s.gcr.io/pause:3.1 172.17.0.98:5000/pause:3.1
~]# docker images
REPOSITORY             TAG IMAGE ID     CREATED       SIZE
172.17.0.98:5000/pause 3.1 da86e6ba6ca1 4 years ago   742kB
​
# 脚本一键导入镜像仓库
~]# docker images | awk '$2!="TAG"{print $1,$2}'|while read _f _v; do docker tag ${_f}:${_v} 172.17.0.98:5000/${_f##*/}:${_v}; docker push 172.17.0.98:5000/${_f##*/}:${_v}; docker rmi ${_f}:${_v}; done
# 查看仓库
~]# curl http://172.17.0.98:5000/v2/_catalog

6)安装IPVS负载均衡与概述

概述

kube-proxy是什么

  • kube-proxy是实现kubernetes Service的通信与负载均衡机制的重要组件,是kubernetes的核心组件

kube-proxy代理模式

  • kubernetes v1.0,用户空间代理模式

  • kubernetes v1.1,iptables模式代理

  • kubernetes v1.8,ipvs代理模式,如果不满足条件退回至iptables的代理模式

如和启用IPVS模式

  • 内核必须支持ip_vs,ip_vs_rr,ip_vs_wrr,ip_vs_sh,nf_conntrack_ipv4

  • 必须有ipvsadm和ipset软件包

  • 配置文件中开启IPVS参数

  • mode:ipvs

# centos系统默认支持ipvs
# 安装ipvs
~]# yum install -y ipvsadm ipset

7)配置master主机环境

# 配置主机hosts
~]# vim /etc/hosts
172.17.0.51 master
172.17.0.114 node1
172.17.0.142 node2
172.17.0.98 registry
~]# ping -w4 node1 &&  ping -w4 node1 &&  ping -w4 master && ping -w4 registry
# 配置网桥监控主机流量,主机路由转发(文件不存在需创建)
~]# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
​
# 加载主机模块
~]# modprobe br_netfilter(开启netfilter对bridge设备的监控)
~]# sysctl --system
.....
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

8)使用kubeadm部署

kubeadm 命令

-config:    配置管理命令
-help:      查看帮助
-init:      初始命令
-join:      node加入集群的命令
-reset:     还原状态命令
-token:     token凭证管理命令
-version:   查看版本

安装master

~]# mkdir init;cd init
# 生成应答文件
~]# kubeadm config print init-defaults > kubeadm-init.yaml
​
##  查找ipvs启动kind后续写到问件里
# 查看查找方式
~]# kubeadm config print init-defaults --help
--component-configs ... values: [KubeProxyConfiguration KubeletConfiguration]. ...
# 利用查找方式查找kind与ipvserion
~ ]# kubeadm config print init-defaults --component-configs KubeProxyConfiguration
.....
apiVersion: kubeproxy.config.k8s.io/v1alpha1
....
kind: KubeProxyConfiguration
....
​
# 修改应答文件
~]# vim kubeadm-init.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0s  # token生命周期usages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 172.17.0.51# apiserver地址,修改成本地的apiserverbindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: mastertaints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: 172.17.0.98:5000# 镜像地址,需需修改
kind: ClusterConfiguration
kubernetesVersion: v1.23.2  # 版本一定要和镜像一致,不然后续会报错
networking:dnsDomain: cluster.local#需修改成自己的域名如:(xxx.163.com),没有用默认的也行podSubnet: 10.244.0.0/16 # 添加一行并配置pod的ip段(不要冲突)serviceSubnet: 10.254.0.0/16# 配置service的ip段
scheduler: {}
---
# 开启ipvs把找到的kind与api放入
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
​
# 初始化master
~]# kubeadm init --config=kubeadm-init.yaml |tee master-init.log
# 初始化master并把日志拷贝到一个文件中
Your 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/config
​
Alternatively, if you are the root user, you can run:
​export KUBECONFIG=/etc/kubernetes/admin.conf
​
You 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 172.17.0.51:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:72db7edc40a9581a8e9f96853a4e3fb03e48cceb24bbb51fcaa1cd1123e3ba09 

根据提示执行命令

~]# mkdir -p $HOME/.kube
~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
~]# chown $(id -u):$(id -g) $HOME/.kube/config
# 测试
​
NAME     STATUS     ROLES                  AGE   VERSION
master   NotReady   control-plane,master   14m   v1.23.2

9)验证安装结果

~]# kubectl get nodes
NAME   STATUS   ROLES                 AGE     VERSION
master NotReady control-plane,master   14m   v1.23.2
​
~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.2", GitCommit:"9d142434e3af351a628bffee3939e64c681afa4d", GitTreeState:"clean", BuildDate:"2022-01-19T17:35:46Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.2", GitCommit:"9d142434e3af351a628bffee3939e64c681afa4d", GitTreeState:"clean", BuildDate:"2022-01-19T17:29:16Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
​
~]# kubectl get componentstatuses
NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health":"true","reason":""}  

3.node节点加入集群

1)node节点如何加入集群

  • 从master的安装日志里查找安装指令样例

  • node节点加入集群必须有master提供的token

2)token管理

如何获取token

管理token使用kubeadm token指令

# 查看日志文件(hash)
~]# cat master-init.log
....
Then you can join any number of worker nodes by running the following on each as root:
# 要想加入集群则要执行以下操作
kubeadm join 172.17.0.51:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:72db7edc40a9581a8e9f96853a4e3fb03e48cceb24bbb51fcaa1cd1123e3ba09

3)获取token与删除token

# 列出token
~]# kubeadm token list
TOKEN                   TTL  EXPIRES               USAGES  DESCRIPTION   EXTRA GROUPS
abcdef.0123456789abcdef 22h  2022-01-23T08:33:52Z  ...... <none>      ....
# (EXPIRES)发现token明天就会过期,所以这里就不要了重新创建token
# 删除token
~]# kubeadm token delete < token>
~]# kubeadm token delete abcdef.0123456789abcdef

4)创建token

# 重新创建token
~]# kubeadm token create
--ttl: 设置寿命(周期时间 0:无限)
--print-join-command: 打印如和使用token
~]# kubeadm token create --ttl=0 --print-join-command
kubeadm join 172.17.0.51:6443 --token 03xc0f.hnul7g7yf6xo6s5x --discovery-token-ca-cerhash sha256:72db7edc40a9581a8e9f96853a4e3fb03e48cceb24bbb51fcaa1cd1123e3ba09
~]# kubeadm token list
TOKEN    TTL  EXPIRES USAGES   DESCRIPTION    EXTRA GROUPS
03xc0f.hnul7g7yf6xo6s5x   <forever>   <never>   authentication,signing   <none>           system:bootstrappers:kubeadm:default-node-ken
# forever无限
# 找一个本记住sha256与token
#sha256:72db7edc40a9581a8e9f96853a4e3fb03e48cceb24bbb51fcaa1cd1123e3ba09
# 03xc0f.hnul7g7yf6xo6s5x 

5)获取token_hash

# 如果实在找不到就用
~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der | openssl dgst -sha256 -hex
writing RSA key
(stdin)= 72db7edc40a9581a8e9f96853a4e3fb03e48cceb24bbb51fcaa1cd1123e3ba09
## 注:书写hash(哈希)时sha256也要xxxxxxxxxx # 如果实在找不到就用~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der | openssl dgst -sha256 -hexwriting RSA key(stdin)= 72db7edc40a9581a8e9f96853a4e3fb03e48cceb24bbb51fcaa1cd1123e3ba09
## 注:书写hash(哈希)时sha256也要

6)node安装

  • 初始化

卸载防火墙firewalld-*

禁用selinux和swap

配置yum仓库,安装kubeadm、kubelet、 docker-ce-安装IPVS模式软件包ipvsadm、 ipset

配置docker私有镜像仓库和cgroup驱动(daemon. json)-配置内核参数(/etc/sysctI. d/k8s. conf)

配置etc/hosts (master能访问node的主机名 )

1.利用ansibe一键安装node

注:用ansible可能会遇到的问题,清空 /root/.ssh/known

## 安装与配置ansible
# 先修改主机名称
~]# hostnamectl set-hostname node1 # (其他几个都要需改)
~]# ssh-keygen
~]# ssh-copy-id [所有节点]
~]# yum -y install ansible
~]# mkdir ansible && cd ansible
# 书写配置文件
~]# vim ansible.cfg
[defaults]
inventory       = hostlist.yaml
host_key_checking   = False
# 准备需要的文件(指定仓库文件,hosts文件,开启转发与监控文件,kubernetes的基础镜像)
~]# mkdir files && cd files
~]# cp /etc/docker/daemon.json daemon.json
~]# cp /etc/hosts hosts
~]# cp /etc/sysctl.d/k8s.conf k8s.conf
~]# vim images.sh
#!/bin/bash
systemctl restart docker
docker pull 172.17.0.98:5000/kube-apiserver:v1.23.2
docker pull 172.17.0.98:5000/kube-controller-manager:v1.23.2
docker pull 172.17.0.98:5000/kube-scheduler:v1.23.2
docker pull 172.17.0.98:5000/kube-proxy:v1.23.2
docker pull 172.17.0.98:5000/etcd:3.5.1-0
docker pull 172.17.0.98:5000/coredns:v1.8.6
docker pull 172.17.0.98:5000/pause:3.6
​
# 书写地址库yaml
~]# cd ..
~]# vim hostlist.yaml
all:children:nodes:hosts:172.17.0.114: {}  # 填写ip(可多个)172.17.0.98: {}ungrouped: {}
# 测试联通性
~]# ansible nodes -m ping
​
# 书写安装node的playbook
~]# vim node_install.yaml
---
- name:hosts:- nodesvars:master: '192.168.1.21:6443'  # 指定master机器token: 'fm6kui.mp8rr3akn74a3nyn'  # master机器的token与hashtoken_hash: 'sha256:f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c' tasks:- name: disable swap # 第一个任务关闭swaplineinfile:path: /etc/fstabregexp: 'swap'state: absentnotify: disable swap- name: Ensure SELinux is set to disabled mode  # 第二个任务关闭SELINUXlineinfile:path: /etc/selinux/configregexp: '^SELINUX='line: SELINUX=disablednotify: disable selinux- name: remove the firewalld # 第三个任务卸载firewalld yum:name:- firewalld - firewalld-filesystemstate: absent- name: daojian yum  # 搭建yumcopy:src: /etc/yum.repos.d/kubernetes.repo dest: /etc/yum.repos.d/kubernetes.repo- name: install k8s node tools # 安装k8s所需服务(kubectl是控制节点,只在主上安装)yum:name:- kubeadm- kubelet- docker-ce- ipvsadm- ipsetstate: presentupdate_cache: yes- name: Create a directory if it does not exist # 创建一个目录file:path: /etc/dockerstate: directorymode: '0755'- name: Copy file with /etc/hosts # 配置hostcopy:src: files/hostsdest: /etc/hostsowner: rootgroup: rootmode: '0644'- name: Copy file with /etc/docker/daemon.json # 拷贝文件到在上面创建的docker目录中copy:src: files/daemon.jsondest: /etc/docker/daemon.jsonowner: rootgroup: rootmode: '0644'  notify: sys- name: Copy file with images # 把要的基础镜像名称放到文件中copy:src: files/images.shdest: /root/images.showner: rootgroup: rootmode: '0655'notify: shell test- name: Copy file with /etc/sysctl.d/k8s.conf # 拷贝网桥监控主机流量,主机路由转发文件copy:src: files/k8s.confdest: /etc/sysctl.d/k8s.confowner: rootgroup: rootmode: '0644'notify: enable sysctl args- name: enable k8s node service # 启动看k8s与dockerservice:name: "{{ item }}"state: startedenabled: yeswith_items:- docker- kubelet- name: check node state # vim stat:path: /etc/kubernetes/kubelet.confregister: result- name: node join    # 加入集群shell: kubeadm join '{{ master }}' --token '{{ token }}' --discovery-token-ca-cert-hash '{{ token_hash }}'when: result.stat.exists == Falsehandlers:  # notify创建触发命令- name: disable swapshell: swapoff -a- name: disable selinuxshell: setenforce 0- name: enable sysctl argsshell: sysctl --system- name: sysshell: systemctl restart docker- name: shell testshell: /root/images.sh

验证安装

# 在master机器上查看
~]# kubectl get nodes
NAME              STATUS     ROLES                  AGE     VERSION
master            NotReady   control-plane,master   46h     v1.23.2
vm-0-114-centos   NotReady   <none>                 3h55m   v1.23.2
vm-0-142-centos   NotReady   <none>                 3h19m   v1.23.2

4.k8s网络插件安装配置

1)flannel概述

  • Flannel实质是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP,VxLAN,AWS,VPC和GCE路由等数据转发方式

  • 使用flannel使不同的容器实现互联互通

flannel架构图

软件地址:https://github.com/coreos/flannel

资源文件 kube-flannel.yml

镜像文件 flannel.tar.gz

2)准备资源

  • 资源文件

  • 镜像文件

## 不可以连网的机器
# 找一台可以联网的机器,操作,
~]# docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
~]# docker pull  rancher/mirrored-flannelcni-flannel:v0.16.1
~]# docker save -o flannel.tar rancher/mirrored-flannelcni-flannel:v0.16.1
~]# docker save -o flannel2.tar rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
~]# tar -zcf flannel.tar.gz flannel.tar flannel2.tar
~]# wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 然后把文件上传master服务器
~]# scp flannel.tar.gz kube-flannel.yml [masterip]
# 上传镜像至私有仓库
~]# docker load -i flannel.tar.gz
~]# docker tag quay.io/coreos/flannel:v0.12.0-amd64 192.168.1.100:5000/flannel:v0.12.0-amd64
~]# docker push 192.168.1.100:5000/flannel:v0.12.0-amd64
​
​
## 可以上网的直接下载yml文件即可,所有节点直接下拉容器
~]# wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
~]# docker pull rancher/mirrored-flannelcni-flannel:v0.16.1
~]# rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0

3)修改配置文件并安装

## yml修改配置
# 先查看pod分配的网段
~]# cat config/kubeadm-init.yaml  | grep podSubnetpodSubnet: 10.244.0.0/16
​
# 修改flannel的yml文件
~]# vim kube-flannel.yml
128: "Network": "10.244.0.0/16",  # 这一上的podip必须与kubeadm的启动配置文件必须一致
​
# 如果不能联网的话改成私有仓库地址,可以联网则忽略
169 :192.168.1.100:5000/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
172: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
194: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
237-结尾: 删除  # arm是嵌入式的服务
​
# 启动flannel
~]# kubectl apply -f kube-flannel.yml

4)验证结果

~]# kubectl get nodes
NAME              STATUS     ROLES                  AGE    VERSION
master            Ready      control-plane,master   2d6h   v1.23.2
vm-0-114-centos   Ready      <none>                 12h    v1.23.2
vm-0-142-centos   Ready      <none>                 12h    v1.23.2
~]# kubectl get pods -A

kuberbetes的架构与kubernetets集群搭建相关推荐

  1. 启动hadoop没有resourcemanager_5.hadoop-MR YARN架构理论与集群搭建

    MR原语 输入(格式化k,v)数据集map映射成一个中间数据集(k,v)reduce 相同"的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算 计算框架 Partit ...

  2. Mycat高可用架构原理_Mycat集群搭建_HA高可用集群_高可用_单表存储千万级_海量存储_分表扩展---MyCat分布式数据库集群架构工作笔记0027

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 前面我们已经讲了,对于数据库来说,mycat可以,我们通过搭建一主一从,双主双从,来实现数据库集群 ...

  3. Hbase基础(特点、架构、应用场景、集群搭建、HA设计)这一篇就够了

    Hbase基础(特点.架构.应用场景.集群搭建.HA设计)这一篇就够了 1. Hbase特点 2. Hbase VS RDBMS 3. Hbase架构及版本选择 4. Hbase应用场景 5. Ntp ...

  4. mycat mysql好可用架构_想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?...

    一.集群架构 1.MyCat实现读写分离架构 在我前面的文章, 我已经讲解过了通过MyCat来实现MySQL的读写分离, 从而完成MySQL集群的负载均衡 , 如下面的结构图: 但是以上架构存在问题 ...

  5. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  6. 高性能网站架构之缓存篇—Redis集群搭建

    看过 高性能网站架构之缓存篇--Redis安装配置和高性能网站架构之缓存篇--Redis使用配置端口转发 这两篇文章的,相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的 ...

  7. 2017微服务 mysql集群_微服务架构系列之Nacos集群搭建

    上回我们说到了<微服务架构系列之Nacos 配置核心概念>,这次我们讲讲Nacos 集群环境搭建. 集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图: 如果 ...

  8. 缓存架构设计之——Redis集群搭建

    前述 这里我们要基于Docker 安装一个redis集群,主要包含:Redis集群配置,主从复制,集群扩容缩容. 1.Redis集群高级应用 这里安装6个redis,配置如下 Redis节点 IP 端 ...

  9. 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的集群搭建以及shell启动命令脚本编写 一.搭建 ...

最新文章

  1. ImageView可直接调用的,根据URL设置图片的工具类
  2. 川教版计算机三年级下册教案,川教版小学三年级下册信息技术教案(全册)
  3. 未到期的应收票据贴现时如何记账
  4. 【机器学习基础】使用python实现BP算法
  5. python多项式回归_在python中实现多项式回归
  6. Flsak爱家租房--实名认证
  7. Linux 按 Ctrl + S 卡死的解决办法
  8. 映射内网ftp服务器到公网报错问题解决
  9. UIViewController 之LoadView详解
  10. 在mysql中如何添加函数库_详细讲解如何为MySQL数据库添加新函数
  11. Win7+Ubuntu双系统时间不一致
  12. php 和 java_Java和php怎么选择??
  13. 辽宁移动计算机类专业笔试题库,2019辽宁中国移动笔试行测模拟题(八)
  14. 手机把网页保存为html,怎么保存整个网页
  15. 牛学长iTunes备份密码移除工具
  16. python-Excel操作(xlrd读,xlwt写)
  17. 数字图像处理Python语言实现-图像增强-导向滤波(Guided Filter)
  18. RecyclerView 刷新Item图片闪烁
  19. c++开平方sqrt
  20. 重装fedora17之后的一些配置

热门文章

  1. 深入理解Hadoop YARN中的Container概念
  2. Python代码发送post请求接口测试--转载
  3. 你不会想到这个购物平台竟然能智能到这种程度
  4. MFC对话框控件访问的七种方式
  5. Linux configure 参数解释,程序的这装,卸载
  6. 程序、进程、线程之间的区别
  7. VDI序曲九 实战体验Remote FX(重磅推荐)
  8. 软件体系结构的风格(转载)
  9. Window7新建文件夹后刷新才显示的解决办法
  10. Xargs用法详解(原创)