Kubernetes快速实战
K8S概览1.1 K8S是什么?K8S官网文档:https://kubernetes.io/zh/docs/home/K8S是Kubernetes的全称,源于希腊语,意为“舵手”或“飞行员”,官方称其是:用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。翻译成大白话就是:“K8S是负责自动化运维管理多个Docker程序的集群”。那么问题来了:Docker运行本来已
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节点添加进集群失败,可以删除节点重新添加
要删除 k8snode1 这个节点,首先在 master 节点上依次执行以下两个命令11
kubectl drain k8s‐node1 ‐‐delete‐local‐data ‐‐force ‐‐ignore‐daemonsets
kubectl delete node k8s‐node1
执行后通过 kubectl get node 命令可以看到 k8snode1 已被成功删除
接着在 k8snode1 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执行命令添加到集群
kubeadm reset
更多推荐
所有评论(0)