Kubernetes简介
Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
快速部署应用
快速扩展应用
无缝对接新的应用功能
节省资源,优化硬件资源的使用
Kubernetes 特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚机轻量、更“透明”,这更便于监控和管理。
在之前的实验基础上操作,停掉部署的服务
1,srver1和server2和server3 都需要配置以下操作
vim /etc/docker/daemon.json
##############################
{
"registry-mirrors": ["https://1wz754td.mirror.aliyuncs.com"],
"exec-opt": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
#############################################
systemctl daemon-reload
systemctl restart docker
2,swapoff -a #三个主机都需要关闭swap分区
vim /etc/fstab
3,配置阿里云yum:
vim /etc/yum.repos.d/k8s.repo
#####################################
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
########################################
yum install -y kubelet kubeadm kubctl #安装三个包
scp k8s.repo server2:/etc/yum.repos.d/ #server2和server3都安装
scp k8s.repo server3:/etc/yum.repos.d/
systemctl enable --now kubelet #部署节点开启服务
kubeadm config images list #查看所需要的镜像
kubeadm config print init-defaults #查看默认的配置
官网拉取不到镜像可以从阿里云拉取
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers # 查看阿里云镜像仓库
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers #从阿里云拉取镜像
server2和server3同时也要从阿里云拉取镜像
ubeadm config images pull --image-repository registry.aliyuncs.com/google_containers #拉取镜像
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers #需要网络插件(初始化集群)
kubeadm join 192.168.213.10:6443 --token itqiuj.byujy9s33b0e9x5y \
--discovery-token-ca-cert-hash sha256:5c6e17048ab960064b1d6c8293e4fb021a6c4a435d7d3c620f016c41d4a780f3 #此命令初始化的时候生成,节点扩容server2和server3
注意kubeadm token list(只有24小时超过的话需要重新生成和添加)
创建一个用户来操作kube
useradd kubeadm #创建用户
visudo
根据提示初始化sudo:
su - kubeadm
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get node #查看已经部署好的节点
echo "source <(kubectl completion bash )" >> ~/.bashrc #让kubectl可以补命令
复制文本到 kube-flannel.yml:
\vi kube-flannel.yml #编辑文件
server1 server2和server3 #拉取镜像 自己拉取镜像有问题微信下载老师的镜像
kubectl taint nodes --all node-role.kubernetes.io/master- 让master加入调度
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //' #查看加密,生成新的token需要
Pod可以创建和管理k8s最小可部署单元,一个pod代表集群中运行一个进程,每个pod都有一个唯一的IP
Pod 是 kubernetes 系统的基础单元,是由用户创建或部署的最小组件,也是 kubernetes 系统上运行容器化应用的资源对象。Kubernetes 集群中其他资源对象都是为 pod 这个资源对象做支撑来实现 kubernetes 管理应用服务的目的。Kubernetes 集群组件主要包括主节点组件API Server、Controller Manager、Scheduler 以及子节点组件 kubelet、container Runtime(如docker)、kube-proxy 等。从与集群各组件交互角度讲述 pod 的创建、运行、销毁等生命周期,Pod 生命周期中的几种不同状态包括pending、running、succeeded、failed、Unknown。与API Server交互
1,命令行部署
Kubectl run nginx --image=nginx --replicas=3 --record #部署 --record回滚标签
kubectl get pod -o wide #详细信息
kubectl describe pod nginx-6db489d4b7-dnbw9 #拉取镜像等信息
集群内部节点可以访问,但是外部不可以访问
内部容器访问
两个容器之间的访问;
kubectl expose deployment nginx --port=80 --target-port=80 #端口的映射
kubectl run test -it --image=busybox --restart=Never # 开启容器
wget -O - -q http://nginx #可以访问
第一种方法: kubectl expose deployment nginx --port=80 --target-port=80 --type=Nodeport #直接可以用命令来指定
第二种办法;编辑文件:
kubectl edit svc nginx #编辑文件 将type=Nodeport
kubectl describe svc nginx #查看
kubectl scale deployment nginx --replicas=6 #拉伸
kubectl scale deployment nginx --replicas=3 #缩减
滚动更新:
kubectl set image deployment/nginx nginx=nginx:1.16.0 #只需换镜像即可
回滚:
kubectl rollout history deployment nginx #查看设置的回滚记录
kubectl rollout undo deployment nginx --to-revision=1 #回滚