集群篇-k8s介绍
@[TOC]集群篇-k8s介绍
一、集群业务介绍
集群篇: 服务器的搭建、集群的管理、运维
1.集群业务介绍
集群:k8s及自动化部署,服务器的预警监控功能
二、k8s 集群部署
1.k8s 快速入门
1).Kubernetes 是什么?
Kubernetes 简称 k8s。是用于自动部署,扩展和管理容器化应用程序的开源系统。
中文官网:https://kubernetes.io/zh/
中文社区:https://www.kubernetes.org.cn/
官方文档:https://kubernetes.io/zh/docs/home/ 笔记的版本是1.7.1
社区文档:http://docs.kubernetes.org.cn/
a.部署方式的进化
https://kubernetes.io/zh/docs/concepts/overview/
b. Kubernetes的功能:
服务发现和负载均衡、存储编排、自动部署和回滚、自动完成装箱计算、自我修复、密钥与配置管理
它仅仅是帮我们部署、管理集群的
c. Kubernetes 不是什么
不限制支持的应用程序类型
不部署源代码、也不构建你的应用程序
不提供应用程序级别的服务作为内置服务
不要求日志记录、监视或警报解决方案
不提供或不要求配置语言/系统
不提供也不采用任何全面的机器配置、维护、管理或自我修复系统
Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要
d. Kubernetes 可以做的工作
Kubernetes :调度、自动恢复、水平伸缩
调度:服务的调度
自动恢复:发现某个服务器(节点)不响应,Kubernetes 可以自动把应用转移恢复到另外一个服务器上,从另一服务器上拉起这个应用。那么,这个应用还能照常工作。
水平伸缩:比如黄色应用太忙,超过了业务负载。Kubernetes 检查到此状态,可以将这个非常忙的应用直接复制到多台服务器。所以可以自动伸缩。包括如果应用闲了,不需要这么多资源,可以把多余应用剔除掉,保持最新的状态。
Kubernetes 就是一个分布式编排系统,管理分布式系统的。
2).架构
Kubernetes 组件
Master 组件:主组件
Node 组件:节点组件
Kubernetes 最小单元是一个pod,多个pod组成service。每一个pod就是多个容器。
1、整体主从方式
2、Master 节点架构
3、Node 节点架构
3).概念
2、k8s 集群安装
2.1、环境准备
1、准备工作
网卡修改: 169.254.116.151 到 192.168.56.1
子网掩码修改:255.255.0.0 到 255.255.255.0
保存到 D:\software\VirtualBox VMs
2.启动三个虚拟机
在.高可用集群篇(架构师提升篇)\资料源码\docs\code下找到k8s文件夹,
k8s 百度云地址 提取码 1111https://pan.baidu.com/s/1e-WtkRjgS7UXVBWgYyuDcw
a.启动三个虚拟机
在k8s文件夹,进入cmd模式
创建3个虚拟机:
vagrant up
创建成功:查看结果
ip为
192.168.56.100
192.168.56.101
192.168.56.102
b.开启 root 的密码访问权限。
使用连接虚拟机:
cmd执行命令
vagrant ssh k8s-node1
切换到root,密码vagrant
su root
密码:vagrant
开启 root 的密码访问权限
vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes
重启服务
service sshd restart
重复以上步骤:
执行2次exit退出,在执行命令:
修改k8s-node2、k8s-node3
c.使用xshell连接虚拟机
d.设置虚拟机网络环境- - -NET网络网卡
查看默认网卡
ip route show,默认为eth0
查看ip
ip addr
不使用网络地址转换,怎么修改??
怎么修改?
创建NET网络网卡
为每个虚拟机 配置网络为NET网络
测试
虚拟机相互ping,再ping外网如百度
3.设置 linux 环境(三个节点都执行)
1).关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
2).关闭 selinux:(selinux为linux默认的安全策略)
sed -i 's/enforcing/disabled/' /etc/selinux/config
禁掉当前会话
setenforce 0
3).关闭 swap:(关闭内存交换)
swapoff -a 临时
永久
sed -ri 's/.*swap.*/#&/' /etc/fstab
验证,swap 必须为 0;
free -g
4).添加主机名与 IP 对应关系
- 通过hostname,查看主机名称
- 通过ip addr,查看eth0的ip
即/etc/hosts 文件
vi /etc/hosts
10.0.2.15 k8s-node1
10.0.2.22 k8s-node2
10.0.2.23 k8s-node3
ip 为ip addr,获取node1、node2、node3的ip
5).将桥接的 IPv4 流量传递到 iptables 的链:三个虚拟机都执行
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
让系统应用此规则
sysctl --system
6).备份虚拟机
三个虚拟机都备份
2.2、所有节点 安装 Docker、kubeadm、kubelet、kubectl
Docker:Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker
kubeadm:使用kubeadm,使集群部署简单
kubelet:kubelet是每一个node节点上的代理,帮我们干活。
kubectl:通过命令行来操作Kubernetes集群
1、安装 docker
1)、卸载系统之前的 docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2)、安装 Docker-CE
安装必须的依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置 docker repo 的 yum 位置
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装 docker,以及 docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io
问题:找不到docker-ce docker-ce-cli containerd.io
解决:上面问题
更换一下镜像仓库,更换成阿里云镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
重新运行安装Docker命令
sudo yum -y install docker-ce docker-ce-cli containerd.io
安装docker 成功:
3)、配置 docker 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors":
["https://registry.docker-cn.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
问题:重启docker失败
执行sudo systemctl restart docker,失败
解决:修改daemon.json
编辑/etc/docker/daemon.json
vi /etc/docker/daemon.json
添加:
{"registry-mirrors":["https://registry.docker-cn.com"]}
再次执行----成功
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://e7fl7xak.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
测试:
docker 安装成功
docker ps
4)、启动 docker & 设置 docker 开机自启
systemctl enable docker
2、添加阿里云 yum 源
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
3、安装 kubeadm,kubelet 和 kubectl
yum list|grep kube
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet
2.3、部署 k8s-master
1、master 节点初始化
1).修改node1为master,使用 ip addr 获得它的默认网卡eth0的ip
2).按照我们的 images.sh 先拉取镜像
找到k8s文件夹,把k8s文件夹上传到node1的root下
切换达到k8s目录
修改master_images.sh的权限
chmod 777 master_images.sh
执行master_images.sh,下载镜像
./master_images.sh
查看下载的镜像
docker images
3).master 节点初始化
kubeadm init \
--apiserver-advertise-address=10.0.2.15 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.17.3 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
10.0.2.15 是node1的地址,ip addr获得它eth0的ip
a.master 节点初始化 失败
k8s报错:this Docker version is not on the list of validated versions: 20.10.3. Latest validated version: 19.03,
那就是版本过高了,没有k8s要求就默认装了。
https://www.jianshu.com/p/3178f20ee792
安装了docker 内核,
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
cat /boot/grub2/grub.cfg |grep menuentry
查看可用内核
设置开机从新内核启动
grub2-set-default “CentOS Linux (5.4.144-1.el7.elrepo.x86_64) 7 (Core)”
查看内核启动项
grub2-editenv list
重启系统使内核生效
reboot
查看内核版本是否生效
uname -r
systemctl start docker.service
kubeadm init \
--apiserver-advertise-address=10.0.2.15 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.17.3 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。可以手动
按照我们的 images.sh 先拉取镜像,
地址变为 registry.aliyuncs.com/google_containers 也可以。
科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
拉取可能失败,需要下载镜像。
运行完成提前复制:加入集群的令牌
a.To start using your cluster, you need to run the following as a regular user
执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
b.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/
c.Then you can join any number of worker nodes by running the following on each as root:
等会在node2,node3执行它,把他加入node1节点,即把node1作为master,node2、node3作为slaver节点(从节点)
保存它,
kubeadm join 10.0.2.15:6443 --token 1f6h2p.750s27k40diyvf14 \
--discovery-token-ca-cert-hash sha256:161be0beb9dd6f80a02f4bd070703b80fcaf9201e880b80855d3a79f0df59a6e
2.4、部署 k8s-master、安装 Pod 网络插件(CNI)
直接使用k8s提供的kube-flannel.yml
应用flannel网络
kubectl apply -f kube-flannel.yml
获取所有名称空间
kubectl get ns
获取所有名称空间的pods
kubectl get pods --all-namespaces
获取kube的使用节点,
kubectl get nodes
1).把其他节点添加到master
其他节点,如node2,node3,
在node2,node3,执行
注意:ip为node1的eth0的ip,命令为2.3的1的3)的c的结果
kubeadm join 10.0.2.15:6443 --token blcnxp.dephwp5eapch86zm --discovery-token-ca-cert-hash sha256:e7e9d8043e69eb9fb010b3140c53d2b3c437837c002b7e1a3b1dc5947dad47a8
问题:添加节点时,token 过期怎么办
在node1执行
kubeadm token create --print-join-command
kubeadm token create --ttl 0 --print-join-command
获得一串代码
再node2、node3等其他节点执行,把节点添加到node1的master里
问题:把其他节点添加到master,失败
看master初始化失败的内容,2.3 --> 1—>3)------>a
给每个slaver安装内核,
启动docker
再运行
kubeadm join 10.0.2.15:6443 --token fw3if5.20rmsj77y5kmqrgv --discovery-token-ca-cert-hash sha256:161be0beb9dd6f80a02f4bd070703b80fcaf9201e880b80855d3a79f0df59a6e
解决: k8s节点处于 Init:ImagePullBackOff
K8S应用FLANNEL失败解决INIT:IMAGEPULLBACKOFF
下载flannel:v0.12.0-amd64导入到docker中
可以去https://github.com/coreos/flannel/releases官方仓库下载镜像
把他放到 master,slaver1,slaver2的root下
加载它
docker load < flanneld-v0.11.0-amd64.docker
,等一会后,再看master,节点全为running
docker images
kubectl get pod -n kube-system
监控 pod 进度
在master即node1执行,监控 pod 进度
kubectl get pod -n kube-system -o wide
等 3-10 分钟,完全都是 running 以后使用 kubectl get nodes 检查状态
查看节点初始化状态
查看pod状态
kubectl get pod -n kube-system -o wide
查看节点初始化状态
如kube-flannel-ds-amd64-89z7w
kubectl describe pod kube-flannel-ds-amd64-89z7w -n kube-system
可以看到,还在拉取镜像。。。
查看master的所有节点
在master即node1,可以查看添加到master的所有节点
kubectl get nodes
当状态时ready,说明集群环境搭建成功
初始化master失败,
找不到kubeadm 的版本
借鉴
更多推荐
所有评论(0)