kubernetes, 简称 K8s, 是用 8 代替 8 个字符“ubernete” 而成的缩写。 是一个开源的, 用于管理云平台中多个主机上的容器化的应用, Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful) ,Kubernetes 提供了应用部署, 规划, 更新, 维护的一种机制。2. k8s 的功能
1.自动装箱
:基于容器对应用运行环境的资源配置要求自动部署应用容器
2.自我修复(自愈能力)
:当容器失败时, 会对容器进行重启,当所部署的 Node 节点有问题时, 会对容器进行重新部署和重新调度,
当容器未通过监控检查时, 会关闭此容器直到容器正常运行时, 才会对外提供服务
3.水平扩展
: 通过简单的命令、 用户 UI 界面或基于 CPU 等资源使用情况, 对应用容器进行规模扩大或规模剪裁
4.服务发现
:用户不需使用额外的服务发现机制, 就能够基于 Kubernetes 自身能力实现服务发现和负载均衡.
5.滚动更新
:可以根据应用的变化, 对应用容器运行的应用, 进行一次性或批量式更新.
6.版本回退
:可以根据应用部署情况, 对应用容器运行的应用, 进行历史版本即时回退
7.密钥和配置管理
:在不需要重新构建镜像的情况下, 可以部署和更新密钥和应用配置, 类似热部署。
8.存储编排
:自动实现存储系统挂载及应用, 特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、 网络存储(NFS、 Gluster、 Ceph 等)、 公共云存储服务
9.批处理
:提供一次性任务, 定时任务; 满足批量数据处理和分析的场景。
3. k8s 的架构
官网地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
4.1 安装方式安装采用 : kubeadm kubeadm部署方式: kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具, 这个工具能通过两条指令完成一个 kubernetes 集群的部署。 第一. 创建一个 Master 节点 kubeadm init 第二. 将 Node 节点加入到当前集群中 $ kubeadm join4.2 安装要求
1.操作系统 CentOS7.x-86_x64 2.硬件配置: 2GB 或更多 RAM, 2 个 CPU 或更多 CPU, 硬盘 30GB 或更多 3.网络要求:集群中所有机器之间网络互通,并且可以联网。 4.禁止 swap 分区4.3 部署规划
1.在所有节点上安装 Docker 和 kubeadm 2.部署 Kubernetes Master 3.部署容器网络插件 4.部署 Kubernetes Node, 将节点加入 Kubernetes 集群中 5.部署 Dashboard Web 页面, 可视化查看 Kubernetes 资源4.4 准备组件规划
| 角色 | ip | HostName |
|---|---|---|
| master | 192.168.1.130 | bigdata001.com |
| node | 192.168.1.129 | bigdata002.com |
| node | 192.168.1.128 | bigdata003.com |
systemctl stop firewalld systemctl disable firewalld5.2 关闭 selinux(三台都执行)
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 setenforce 0 # 临时5.3 关闭 swap(三台都执行)
swapoff -a # 临时 vim /etc/fstab # 永久5.4 设置主机名(三台都执行)
hostnamectl set-hostname5.5 将桥接的 IPv4 流量传递到 iptables 的链 (三台都执行)[root@bigdata001 ~]# vi /etc/hosts 192.168.1.130 bigdata001.com 192.168.1.129 bigdata002.com 192.168.1.128 bigdata003.com
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system # 生效5.5 时间同步(三台都执行)
yum install ntpdate -y ntpdate time.windows.com5.6 安装Docker/kubeadm/kubelet(三台都执行)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
安装好后执行
[root@bigdata001 ~]# docker -v
Docker version 18.06.1-ce, build e68fc7a
[root@bigdata001 ~]#
[root@bigdata002 run]# docker -v
Docker version 18.06.1-ce, build e68fc7a
[root@bigdata002 run]#
[root@bigdata003 etc]# docker -v
Docker version 19.03.6, build 369ce74a3c
[root@bigdata003 etc]#
**************************************************
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
5.7 添加阿里云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 EOF5.8 安装kubeadm,kubelet和kubectl(三台都执行)
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 systemctl enable kubelet5.9 部署Kubernetes Master(master 执行)
kubeadm init --apiserver-advertise-address=192.168.1.130 --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 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config kubectl get nodes5.10加入Kubernetes Node (其他两台执行)
kubeadm join 192.168.1.11:6443 --token esce21.q6hetwm8si29qxwn
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
*****************************************************************************************************************
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
5.11部署CNI网络插件(master 执行)
wget https://raw.githubusercontent.com/coreos/flannel/master/documentation/kube-flannel.yml 默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/documentation/kube-flannel.yml kubectl get pods -n kube-system 这是时候会遇到 无法访问 我们需要在(http://ip.tool.chinaz.com/raw.githubusercontent.com)查询到 对应的ip 添加到hostname 中去如: 查询出来raw.githubusercontent.com 对应的ip 185.199.110.133 185.199.110.133 raw.githubusercontent.com 然后查询出来的状态为为Running 才可以用 [root@bigdata001 ~]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-7ff77c879f-qbnfk 1/1 Running 0 9h coredns-7ff77c879f-rr69c 1/1 Running 0 9h etcd-bigdata001.com 1/1 Running 3 9h kube-apiserver-bigdata001.com 1/1 Running 3 9h kube-controller-manager-bigdata001.com 1/1 Running 2 9h kube-flannel-ds-4zzl7 1/1 Running 0 8h kube-flannel-ds-cv7kf 1/1 Running 0 8h kube-flannel-ds-x2cnn 1/1 Running 1 8h kube-proxy-c9cdb 1/1 Running 2 9h kube-proxy-txxrb 1/1 Running 3 9h kube-proxy-xtq84 1/1 Running 3 9h kube-scheduler-bigdata001.com 1/1 Running 2 9h ********************************************************************************************5.12 测试kubernetes集群(master 测试执行)
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get pod,svc ******************************************************************************************* 三台机器的状态都为 Ready [root@bigdata001 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION bigdata001.com Ready master 9h v1.18.0 bigdata002.com Ready9h v1.18.0 bigdata003.com Ready 9h v1.18.0 [root@bigdata001 ~]# 遇到的问题可以重启 : systemctl daemon-reload systemctl restart docker systemctl restart kubelet systemctl restart kube-proxy ********************************************************************************************
注意:官网收集的错误信息
https://www.bookstack.cn/read/kubernetes-practice-guide/troubleshooting-problems-pod-keep-pending.md
[root@bigdata001 ~]# kubectl get pod,svc NAME READY STATUS RESTARTS AGE pod/nginx-f89759699-rj6sv 1/1 Running 0 8h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1443/TCP 9h service/nginx NodePort 10.106.189.92 80:30916/TCP 8h [root@bigdata001 ~]# 说明 :映射的端口 都为 30916
访问的ip
沟通交流学习



