K8S概述
1.k8s是谷歌在2014年开业的容器化集群管理系统
2.使用k8s进行容器化应用部署
3.使用k8s利于应用扩展
4.k8s目标实施让部署容器化应用更加简洁和高效
K8S特性
1.自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器
2.自我修复(自愈能力)
1.当容器失败时,会对容器进行重启
2.当所部署的Node节点有问题时,会对容器进行重新部署和重新调度当容器未通过监控检查时,会关闭此容器知道容器正常进行时,才会对外提供服务
3.水平扩展
通过简单的命令/用户ui界面或基于cpu等资源使用情况,对应用容器进行规模扩大或规模剪裁
4.服务发现
用户不需要使用额外的服务发现机制,就能够基于Kubernetes自身能力是实现服务发现和负载均衡
5.滚动更新
可以根据应用的变化,对应用容器运行的应用,进行历史版本即时回退
6.密钥和配置管理
在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类型热部署。
存储编排
自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph等)、公共云存储服务
批处理
提供一次性任务,定时任务;满足批量数据处理和分析的场景
应用部署架构分类
1.无中心节点架构
GlusterFS
2.有中心节点架构
HDFS
K8S
k8s集群架构组件
Master(主控节点)和node(工作节点)
1.Master组件
apiserver
#集群统一入口,以restuful方式,交给etcd存储
scheduler
#节点调度,选择node节点应用部署
controller-manager
#处理集群中常规后台任务,一个资源对应一个控制器
etcd
#存储系统,用于保存集群相关的数据
2.node组件
1.kubelet
#master排到node节点代表,管理本机容器
2.kube-proxy
#提供网络代理,负载均衡等操作
k8s核心概念
1.pod
1.最小部署单元
2.一组容器的集合
3.共享网络
4.生命周期是短暂的
2.cntroller
1.确保预期的pod副本数量
2.无状态应用部署 (可以随便用)
3.有状态应用部署 #需要有特定条件(依赖存储,网络IP)
确保所有的node运行同一个pod一次性任务和定时任务
3.service
1.定义一组pod的访问规则
kubernetes 集群搭建(kubeadm 方式)
安装要求
1.一台或多台机器,操作系统 CentOS7.x-86_x64
2.硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
3.集群中所有机器之间网络互通
4.可以访问外网,需要拉取镜像
5.禁止 swap 分区
环境要求
硬件要求
master | 2核4G |
---|---|
node | 4核8G |
环境准备
角色 | IP |
---|---|
k8s-master | 192.168.111.128 |
k8s-node1 | 192.168.111.129 |
k8s-node2 | 192.168.111.130 |
系统初始化
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
或者
systemctl stop firewalld && systemctl disable firewalld
关闭selinux
sed -i 's/enforcing/disabled' /etc/selinux/config #永久
setenforce 0 #临时
关闭swap
swapoff -a #临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
主机名
hostnamectl set-hostname <hostname>
在master添加hosts
cat >> /etc/hosts << EOF
192.168.111.128 k8s-master
192.168.111.129 k8s-node1
192.168.111.130 k8s-node2
EOF
将桥接的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 #使其生效
时间同步
yum install ntpdate -y
ntpdate time.windows.com
所有节点安装Docker/kubeadm/kubelet
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install docker-ce-18.06.1.ce-3.el7 -y
systemctl start docker && systemctl enable docker
docker --version
添加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
安装kubernetes,kubelet和kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet
部署Kubernetes Master
在192.168.111.128(Master)执行。
kubeadm init --apiserver-advertise-address=192.168.111.128 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
完成后根据提示完场操作
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes #查看node节点
在192.168.75.111/112(node)执行。
向集群添加新节点,执行Kubeadm init输出的kubeadm Join命令:(根据结尾自己的命令)
kubeadm join 192.168.111.128:6443 --token twjnag.eqlezwll77deahjz \
--discovery-token-ca-cert-hash sha256:8402d0e19ba5cf7e75f4b32086cb63b6f0f5c328ee5168af5cded77a0b7a4f37
完成后可以使用以下命令查看是否加入成功
kubectl get nodes
默认token有效期为24小时,当过期后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
部署CNI网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pods -n kube-system #查看运行状况
如果无法访问外网则访问下面的地址,下载到本地再上传到服务器
https://www.aliyundrive.com/s/2VFpYQizPXe
传入后执行以下命令
kubectl apply -f kube-flannel.yaml
查看运行状况
kubectl get pods -n kube-system
测试kubernetes集群
在Kubernetes集群中创建一个pod,验证是否正常运行:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc