在这里插入图片描述

K8S概览

1.1 K8S是什么?

K8S官网文档:https://kubernetes.io/zh/docs/home/
K8S是Kubernetes的全称,源于希腊语,意为“舵手”或“飞行员”,官方称其是:用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
翻译成大白话就是:“K8S是负责自动化运维管理多个Docker程序的集群”。那么问题来了:Docker运行本来已经挺方便了,为什么要用K8S,它有什么优势?

1.2 K8S核心特性

  • 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。
  • 存储编排:自动挂载所选存储系统,包括本地存储。
  • Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。
  • 批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。
  • 水平扩缩:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩。
  • 自动化上线和回滚:Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。
  • 自动装箱:根据资源需求和其它约束自动放置容器,同时避免影响可用性。
  • 自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查容器。

1.3 K8S集群安装

搭建K8S集群,准备三台2核4G的虚拟机(内存至少2G以上),操作系统选择用centos7以上的版本,先在三台机器上装好docker(安装参考docker文章)

在三台机器上都执行如下命令操作:

1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

2、关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
setenforce 0 # 临时关闭

3、关闭swap
swapoff -a # 临时关闭
vim /etc/fstab # 永久关闭
#注释掉swap这行
# /dev/mapper/centos‐swap swap swap defaults 0 0

systemctl reboot #重启生效
free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功

4、给三台机器分别设置主机名
hostnamectl set‐hostname <hostname>
第一台:k8s‐master
第二台:k8s‐node1
第三台:k8s‐node2

5、在 k8s‐master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip
cat >> /etc/hosts << EOF
192.168.159.130 k8s‐master
192.168.159.131 k8s‐node1
192.168.159.132 k8s‐node2
EOF

6、将桥接的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 # 生效

7、设置时间同步
yum install ntpdate -y
ntpdate time.windows.com

8、添加k8s yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes‐el7‐x 86_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

9、如果之前安装过k8s,先卸载旧版本
yum remove ‐y kubelet kubeadm kubectl

10、查看可以安装的版本
yum list kubelet ‐‐showduplicates | sort ‐r

11、安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群
yum install ‐y kubelet‐1.18.0 kubeadm‐1.18.0 kubectl‐1.18.0

12、开机启动kubelet
systemctl enable kubelet
systemctl start kubelet

在k8s-master机器上执行初始化操作(里面第一个ip地址就是k8s-master机器的ip,改成你自己的机器的,后面两个ip网段不用动)

kubeadm init --apiserver-advertise-address=192.168.159.130 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-newwork-cidr=10.244.0.0/16

执行完结果如下图:
在这里插入图片描述

在k8s-master机器上执行如下命令

# 配置使用 kubectl 命令工具(类似docker这个命令),执行上图第二个红框里的命令
mkdir ‐p $HOME/.kube
sudo cp ‐i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id ‐u):$(id ‐g) $HOME/.kube/config

# 查看kubectl是否能正常使用
kubectl get nodes

# 安装 Pod 网络插件
下载:wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
安装:kubectl apply -f calico.yaml

在所有k8s node机器上执行上图第三个红框里的命令

kubeadm join 192.168.159.130:6443 --token ndrvaj.mqdi0jlgzxcteso7 --discovery-token-ca-cert-hash sha256:0b82500d37547cfcd4e230cca9a6b313b601d4bf09255f326f3b28954897e7a2 

在k8s-master机器执行查看节点命令
在node节点配置完之后,要等一段时间,才能都成ready状态。

kubectl get nodes

在这里插入图片描述

用K8S部署Nginx
在k8s-master机器上执行

# 创建一次deployment部署
kubectl create deployment nginx ‐‐image=nginx
kubectl expose deployment nginx ‐‐port=80 ‐‐type=NodePort
# 查看Nginx的pod和service信息
kubectl get pod,svc ‐o wide

在这里插入图片描述
访问Nginx地址: http://任意节点的ip:图中Nginx的对外映射端口
在这里插入图片描述

补充:如果node节点添加进集群失败,可以删除节点重新添加
要删除 k8s­node1 这个节点,首先在 master 节点上依次执行以下两个命令11

kubectl drain k8s‐node1 ‐‐delete‐local‐data ‐‐force ‐‐ignore‐daemonsets
kubectl delete node k8s‐node1

执行后通过 kubectl get node 命令可以看到 k8s­node1 已被成功删除
接着在 k8s­node1 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执行命令添加到集群

kubeadm reset
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐