kubernetes简介和安装
- 集群特点:
简化应用部署 提高硬件资源利用率 健康检查和自修复 自动扩容缩容 服务发现和负载均衡
- 集群架构:
主节点,承载 k8s 的控制和管理整个集群系统的控制面板 工作节点,运行用户实际的应用
- master节点包含下列5个组件:
API-server:用来接收用户请求 scheduler:负责任务调度,例如,在work1上创建几个pod,在work2上创建几个pod等 controller-manager:维护整个k8s的正常运行,管理pod等是否正常运行 etcd:数据库,例如:创建pod的信息以键值对的形式存放在etcd中等
- 所有节点都应有的组件:
kubelet:发送任务,监控检查
- pod是k8s中的最小调度单元,一个 pod 包含一组容器,一个 pod 不会跨越多个工作节点
- pod对外通讯原理
pod地址是不能被外界访问的,此地址为纯私有地址;
访问pod,要创建svc(理解为负载均衡器),svc的地址是不会发生改变的,svc对通过标签的方式定位这些pod,用户发来请求到svc,svc会把请求通过kubeproxy组件转发到后端的pod;
kubeproxy的转发方式有两种(iptables和ipvs) - 第一种方式:kubeadmin安装
系统配置(所有节点): 关闭防火墙、selinux、配置/etc/hosts、关闭swap、配置yum源 安装docker(所有节点): yum install docker -y systemctl enable docker --now 配置相关属性(所有节点): 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 由于网桥工作与数据链路层,在iptables没有开启bridge-nf时,数据会直接经过网桥转发,结果就是对FORWARD的设置失效 sysctl -p /etc/sysctl.d/k8s.conf
配置镜像加速器(所有节点): cat > /etc/docker/daemon.json <<-EOF { "registry-mirrors": ["https://yg6jtm5b.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker
安装相关软件包(所有节点): yum install -y kubelet-1.18.2-0 kubeadm-1.18.2-0 kubectl-1.18.2-0 --disableexcludes=kubernetes --disableexcludes=kubernetes(从yum源里排出一些冲突的包) 注意:需要指定版本,否则会安装最新版本 systemctl enable kubelet --now
kubeadmin的方式来安装(master节点):
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.18.2 --pod-network-cidr=10.244.0.0/16
master配置:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
worker节点配置(将worker加入集群):
kubeadm join 192.168.108.61:6443 --token 40r8vu.uyhxvbci25pqyghs --discovery-token-ca-cert-hash sha256:05ce243870371a733cca2587cd87629edb55de5ed347bec383c3298437a2e9e5
如果命名忘记了,可以通过如下命令找回
kubeadm token create --print-join-command
重置节点(所有节点都可以操作):
kubeadm reset
删除节点:
kubectl drain vms62.rhce.cc --delete-local-data --force --ignore-daemonsets
kubectl delete node vms62.rhce.cc
配置网络calico:
docker load -i calico_v3_10.tar
修改calico配置文件,改为pod地址网段(master节点)
sed -i 's/192.168.0.0/10.244.0.0/g' calico_v3.10.yaml
kubectl apply -f calico_v3.10.yaml
至此,集群已经安装好了! - 第二种方式:kube-config.yaml
kubeadm config view > kube-config.yaml #在装好的集群里生成kube-config.yaml文件
cat kube-config.yaml
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.18.2
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}master配置:
kubeadm init --config kube-config.yaml
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
worker节点配置(将worker加入集群):
kubeadm join 192.168.108.61:6443 --token 40r8vu.uyhxvbci25pqyghs --discovery-token-ca-cert-hash sha256:05ce243870371a733cca2587cd87629edb55de5ed347bec383c3298437a2e9e5
如果命名忘记了,可以通过如下命令找回
kubeadm token create --print-join-command
重置节点(所有节点都可以操作):
kubeadm reset
删除节点:
kubectl drain vms62.rhce.cc --delete-local-data --force --ignore-daemonsets
kubectl delete node vms62.rhce.cc
配置网络calico:
docker load -i calico_v3_10.tar
修改calico配置文件,改为pod地址网段(master节点)
sed -i 's/192.168.0.0/10.244.0.0/g' calico_v3.10.yaml
kubectl apply -f calico_v3.10.yaml
至此,集群已经安装好了 - 常见命令:
kubectl get nodes
kubectl cluster-info
kubectl version
kubectl api-versions
kubectl config view