目录
一、基本介绍
二、组件介绍
1、master组件
2、node组件
三、核心概念
1、Pod
2、controller
3、service
四、单master搭建集群
1、系统初始化
2、安装k8s核心组件
3、容器化安装其他插件
4、配置Master
5、配置worker节点
6、安装图形操作界面dashboard
Kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful) , Kubernetes提供了应用部署,规划,更新,维护的一种机制。
1)apiserver :集群统一入口.以restful方式,交给etcd存储。
2)scheduler:节点调度,选择node节点应用部署。
3)controller-manager:处理集群中常规后台任务,—个资源对应一个控制器。
4)ecd:存储系统,用于保存集群相关的数据。
1)kubeelet:master排到node节点代表,管理本机容器。
2)kube-proxy:提供网络代理,负载均衡等操作。
1)最小部署单元
2)一组容器的集合
3)共享网络
4)生命周期是短暂的
1)确保预期的pod副本数量
2)无状态应用部署
3)有状态应用部署
4)确保所有的node运行同一个pod
5)一次性任务和定时任务
定义pod访问规则
常用命令:
咳咳咳
开启三台虚拟机演示:
环境:三台Ubuntu18
1)关闭防火墙
ufw disable
2)关闭selinux
永久关闭:sed -i 's/enforcing/disabled' /etc/selinux/config
临时关闭:setenforce 0
3)关闭swap分区
这3个地方必须是0。
临时关闭:swapoff -a
永久关闭:sed -ri 's/.*swap.*/#&/' /etc/fstab
4)在master添加主机主机ip和hostname
cat >> /etc/hosts << EOF
192.168.186.110 k8s-cluster-master
192.168.186.111 k8s-cluster-node1
192.168.186.112 k8s-cluster-node2
EOF# 当然在之前也要分别重新命名三台主机的hostname
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
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)时间同步,借助插件来完成
apt-get install ntpdate -y
ntpdate time.windows.com
7)修改内核参数
# 修改内核参数(首先确认你的系统已经加载了 br_netfilter 模块,默认是没有该模块的,需要你先安装 bridge-utils)
apt-get install -y bridge-utils
modprobe br_netfilter
lsmod | grep br_netfilter
1)安装docker
https://docs.docker.com/engine/install/ubuntu/
安装上面官网提示安装即可,租后配置一下阿里安装源
# 添加阿里云安装源的密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 添加阿里云安装源
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
2) 添加阿里云安装源
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat </etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
3)安装三驾马车
apt update && \
apt-get install -y kubelet=1.20.9-00 kubeadm=1.20.9-00 kubectl=1.20.9-00
# 开机启动
systemctl enable kubelet
可以按照下面的命令把需要下载的进行写成shell再执行,当然你自己一条一条执行也行。
tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
images.sh
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
执行: chmod +x ./images.sh && ./images.sh
1)配置hosts
vim /etc/hosts
192.168.186.111 k8s-cluster-master
配置完ping一下是否通,如果你买了域名,做了域名解析这步就不用了
2)只在master执行,主节点初始化
kubeadm init \
--apiserver-advertise-address=192.168.186.110 \
--control-plane-endpoint=k8s-cluster-master \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.169.0.0/16
说明成功了!!!
service-cidr和 pod-network-cidr还有masterip不能有同网段的情况,否则可能后续会有问题。
---如果遇到报错
---设置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
重新加载文件:source /etc/profile
---kubectl get node 查看是否可以获取到master节点
---如果后续有问题最好重新初始化master再往下走
kubeadm reset
rm -rf /root/.kube
rm -rf /etc/cni/net.d
# work节点需要删除
rm -rf /etc/kubernetes/*
---安装要求,直接复制执行就可以
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3)安装网络插件calico
因为在整个kubernetes集群里,pod都是分布在不同的主机上的,为了实现这些pod的跨主机通信所以我们必须要安装CNI网络插件,这里选择calico网络。
首先查看自己的k8对应的calico的版本再下载
查看k8s对应的calico的版本 https://projectcalico.docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements
下载下来引导文件,运行
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
kubectl apply -f calico.yaml
如果前面初始化节点的service-cidr不是默认的 192.168.0.0/16,那么需要再配置文件里做修改
如果有pandding等其他状态的多等一会,就好了
再看下节点情况
kubectl get nodes
master也ready了,到这里maste节点部署完毕
在master节点获取加入集群命令:24小时有效
kubeadm token create --print-join-command
等所有容器running后就算加入完毕
# 每一秒查看一次状态
watch -n 1 kubectl get pod -A
1)直接安装
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
2)过程可能会遇到的问题:
查看日志
kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-mrs9k
发现timeout了,推测是防火墙问题
iptables -L -n --line-numbers | grep dashboard
访问被拒绝了,添加允许被访问
iptables-save > iptables.rules
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
然后删除新创建的dashboard
kubectl delete deployment kubernetes-dashboard --namespace=kubernetes-dashboard
kubectl delete deployment dashboard-metrics-scraper --namespace=kubernetes-dashboard
重启docker后再重新创建即可。
3)端口暴露
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
把type修改一成:NodePort
kubectl get svc -A | grep kubernetes-dashboard
或者
kubectl get services -n kubernetes-dashboard
30673就是我要的端口,你 的和我的不一样,自己查看即可。然后浏览器登录
4)创建用户登录
# 创建一个叫dashboard-admin的账号,并指定命名空间为kube-system
kubectl create serviceaccount dashboard-admin -n kube-system
# 创建一个关系,关系名为dashboard-admin,角色为cluster-admin,账户为kube-system命名空间下的dashboard-admin账号
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 查看Token的编号(第二列)
kubectl get secrets --all-namespaces | grep -i dashboard-admin
# 查看指定Token的编号的具体token值
kubectl describe secret/dashboard-admin-token-mqxw5 -n kube-system
然后用token登录即可
到这里完毕!