简单理解:
docker默认是单机使用的,不可以跨主机,也没有高可用,所以生产环境一般不会单独使用docker跑应用,k8s主要是作为docker的一个调度器来使用,可以使容器实现跨节点通信,当一台运行容器的节点故障后,容器会自动迁移到其它可用节点上继续运行服务,目前比较常用的是k8s
k8s架构:k8s主要由master节点和node节点构成,而且常用操作都在master上操作,作为控制节点角色,node节点提供计算功能
master:
kubectl:k8s的所有操作都是通过kubectl指令操作的
REST API:k8s对外部服务提供的接口服务,例如图形化界面或者kubectl都会通过REST API接口下发指令来控制k8s
scheduler:调度器,例如创建pod,scheduler可以控制将pod分配到哪个pod节点
controller-manager:检测pod或者node的健康状态,并维持pod的正常运行,如果pod故障,controller-manger会自动修复,例如在启动一个pod副本
kubelet:代理软件,例如在master上对node节点下发的指令,都需要通过kubelet组建来告知各个组件
etcd:数据库,所有配置数据都存放在etcd数据库中
kubeproxy:在所有节点都需要运行kubeproxy,后期通过创建svc来将pod映射到外网,当外部通过svc-ip访问pod的时候就需要通过kubeporxy进行路由转发到pod
node:
pod:k8s环境运行的最小单位,一个pod中可以包含一个或多个容器
所有节点操作
1.修改centos时区校准时间
timedatectl set-timezone Asia/Shanghai
yum install -y ntpdate
yum install -y update
ntpdate us.pool.ntp.org
2.下载安装docker
yum install -y yum-utils
正确推荐使用国内的 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
阿里云镜像加速 https://www.aliyun.com/product/acr
文件目录 /etc/docker/daemon.json
{
"registry-mirrors": ["https://qiyb9988.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
2.给每一台机器设置主机名
2.1所有主机修改
hostname 主机名 或者 hostnamectl set-hostname 主机名 ---> 重启
2.2所有主机查看 hostname
3.修改添加master节点目录 vim /etc/hosts
4.所有主机安装kubeadm\kubelet等
4.1所有主机去阿里云上面下载kubeadm\kubelet等 ----- > https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.6a151b11acVrNm
4.2查看所有主机 安装报错日志 cat /var/log/messages
4.3设置所有主机 kubelet 内存
vim /etc/sysconfig/kubelet ----> KUBELET_EXTRA_ARGS="--fail-swap-on=false"
4.4 查看所有主机网桥IP是都为1
cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
cat /proc/sys/net/bridge/bridge-nf-call-iptables
4.5所有主机关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
4.6 所有主机查看kubelet配置 与docker 是都一致
使用docker info 查看
修改该配置 vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://exbabp11.mirror.aliyuncs.com"], #修改镜像仓库
"exec-opts": ["native.cgroupdriver=systemd"] #修改配置
}
4.7 node节点安装的镜像 都是通过阿里下载 重新打标签处理
- registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0
- k8s.gcr.io/kube-proxy:v1.23.0
- rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
- k8s.gcr.io/pause:3.6
- registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
- registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2
注意 master节点要下其他镜像
docker master节点下载K8S镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.0 k8s.gcr.io/kube-apiserver:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.0 k8s.gcr.io/kube-scheduler:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0 k8s.gcr.io/kube-proxy:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.0 k8s.gcr.io/kube-controller-manager:v1.23.0
4.8 master 节点初始化
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --kubernetes-version=1.23.0
成功 必须还要按照K8S提示安装.kube目录等信息
注意令牌有效时间;超时令牌会自动消失 要重新获取
查看kubelet令牌
kubeadm token list
创建kubelet令牌
kubeadm token create
获取身份sha256标识
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
更换令牌与sha256 ---> kubeadm join 172.20.17.150:6443 --token xpjjqv.tzpr3bvjzfbfx8ns --discovery-token-ca-cert-hash sha256:ea3b344f88ae28ac48d77a68b4c37df7d518b9ee937327aed98ea56a7ae2e168
查看节点是否正常 及节点是否都添加上来
kubectl get nodes
4.9 node节点添加到 master节点 注意报错信息
kubeadm join 172.20.17.150:6443 --token 779p75.h48im60q8wdo903o --discovery-token-ca-cert-hash sha256:ea3b344f88ae28ac48d77a68b4c37df7d518b9ee937327aed98ea56a7ae2e168
5.卸载 kubernetes
kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd