文章目录
- 前言
- 1、学习环境准备
- 2、kubernetes的安装
- 2.1 旧环境清理
- 2.2 安装kubernetes(小麻烦)
- 2.3 如果部署出问题要需要重新初始化
- 2.4 部署成功截图
- 3、kubectl命令掌握(熟悉基本命令,后面用的着)
前言
Kubernetes 开篇
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。
现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的将来会支持各种生产云平台中的各种服务,例如,分批,工作流,以及传统数据库。
在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器,在后边的案例中,同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。一个Pod也可以包含O个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享,对于用户创建的每个Pod,系统会自动选择那个健康并且有足够容量的机器,然后创建类似容器的容器,当容器创建失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet,但是,如果是Pod失败或者机器,它不会自动的转移并且启动,除非用户定义了 replication controller。
1、学习环境准备
- 红帽7.6虚拟机四台,分别为server1、server2、server3、server4
- 配置为两核CPU加2G内存,20G虚拟硬盘
- 四台虚拟机需要提前安装好docker-ce(这里可以参考前面学的docker部分)
- 其中server1作为整个环境的本地仓库(本地仓库的搭建可以看docker-仓库篇)
- server2作为kubernetes的管理节点(master)
- server3、server4作为普通kubernetes节点
2、kubernetes的安装
2.1 旧环境清理
在学习docker篇时,我们已经做好了虚拟机,docker-ce以及本地仓库的搭建,下面直接从安装kubernetes开始。
安装docker-swarm集群工具的要提前清理掉,k8s与其不能共存。
- 将所有节点推出docker-swarm,在节点终端输入
docker swarm leave
- 在docker-swarm主机上将节点删除,在master主机终端输入
docker node rm xxx
- 最后master主机强制自己退出docker-swarm,在master主机终端输入
docker swarm leave --force
删除一些不需要的镜像,到这里环境清理完成,如果是新虚拟机可以忽略。
查看仓库运行情况(server1)
2.2 安装kubernetes(小麻烦)
安装步骤:
- 关闭节点的selinux和iptables防火墙
- 所有节点部署docker引擎(安装docker-ce)
- 调整docker启动参数(主要是把Cgroup 驱动换成systemd驱动获得稳定的运行环境)
- 关闭交换空间,记得注释fstab
- 配置kubernetes的阿里云源/etc/yum.repos.d/k8s.repo
- 安装、启动、拉取所需镜像
- 在管理节点(server2)初始化,按照初始化提示完成部署
- 最后使用初始化形成的命令到节点上(server3、4)将节点加入集群
参考链接
这里每个节点都要做,因为k8s有自己的安全策略
调整docker启动参数(主要是把Cgroup 驱动换成systemd驱动获得稳定的运行环境)
# vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
关闭交换空间,记得注释fstab
swapoff -a
vim /etc/fstab #注释swap那一行,防止重启自动启动swap
配置kubernetes的阿里云源/etc/yum.repos.d/k8s.repo
vim /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
安装、启动、拉取所需镜像
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
# 列出所需镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
# 拉取镜像
可以使用参数 --kubernetes-version=v1.20.2 选择对应或者更低版本的镜像
这里除了最后加入集群在节点上操作,其他都在管理节点操作(server2)
在管理节点(server2)初始化,按照初始化提示完成部署
kubeadm config print init-defaults #查看默认配置
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
#初始化
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
echo "source <(kubectl completion bash)" >> ~/.bashrc #命令补齐
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#安装网络组件
kubectl get node #查看节点
docker save quay.io/coreos/flannel:v0.12.0-amd64 registry.aliyuncs.com/google_containers/pause:3.2 registry.aliyuncs.com/google_containers/coredns:1.7.0 registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2 > node.tar
# 导出node节点所需镜像并导入各节点,注意版本号,也可以在node节点直接拉取下来
最后使用初始化形成的命令到节点上(server3、4)将节点加入集群
kubeadm join 172.25.200.2:6443 --token a55bse.7wbzxx70srbrr7ko --discovery-token-ca-cert-hash sha256:b076dddab05e4ed4bdbc2526d1588cc347ddc01199ac9848450ffd716a36ea74
# 此命令是初始化生成的,可以找到
2.3 如果部署出问题要需要重新初始化
kubeadm reset
rm -fr $HOME/.kube
再按照报错慢慢解决即可
2.4 部署成功截图
3、kubectl命令掌握(熟悉基本命令,后面用的着)
https://kubernetes.io/docs/setup/
pod是k8s的最小单位,就像docker的一个容器
kubectl get ns
# 查看namespace空间,k8s默认用namespace空间进行隔离的
kubectl run nginx --image=myapp:v1 # 创建一个pod
kubectl get pod xxx # 查看pod
kubectl get pod -n default #
kubectl get pod -o wide # 详细查看pod(跑在哪个节点上)
kubectl run demo --image=busyboxplus -it # 创建一个交互式容器
kubectl attach -c demo -it # 退出交互式环境后再次进入 -c指定容器,不加默认第一个
kubectl delete pod nginx # 删除某个pod
kubectl describe pod demo # 查看运行的pod
kubectl logs demo # 查看日志
控制器与pod的区别
1. pod删除了就没有了,而控制器会自动启动复本
2. 可以随意拉伸和缩减并自动负载均衡
kubectl create deployment -h
kubectl create deployment nginx --image=myapp:v1 # 创建一个控制器
kubectl get all # 查看所有的控制器 pod
测试删除后恢复
kubectl delete pod nginx-67f9d9c97f-84tl4
kubectl get pod
拉伸缩减
kubectl scale -h
kubectl scale deployment --replicas=2 nginx
kubectl get pod
kubectl get pod -o wide
kubectl scale deployment --replicas=6 nginx
kubectl get pod -o wide
kubectl scale deployment --replicas=2 nginx
kubectl get pod -o wide
kubectl scale deployment --replicas=3 nginx
kubectl get pod -o wide
kubectl get pod
暴露端口
kubectl expose -h
kubectl expose deployment nginx --port=80 # 暴露端口
kubectl get svc # 查看端口及IP
curl 10.100.83.124
curl 10.100.83.124/hostname.html # 测试负载均衡
kubectl describe svc nginx
kubectl get pod -o wide
更新pod镜像
kubectl set image -h # 查看帮助
kubectl get pod # 列出pod
kubectl describe pod nginx-67f9d9c97f-cl4qj # 查看nginx-....的详细信息
kubectl set image depolyment nginx myapp=myapp:v2 # 更新镜像为v2
kubectl get all
回滚,恢复到更新前的版本
kubectl rollout history deployment nginx #查看历史版本
kubectl get pod
kubectl rollout undo deployment nginx --to-revision=1 # 回滚到版本1(v1)
kubectl rollout history deployment nginx #查看历史版本