kubernetes简称K8S,以下内容都简称K8S。
生产环境部署K8s的2种方式, kubeadm和二进制。kubeadm是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 二进制是从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群,复杂度高。
当然,要搭建这么一个可运行的系统通常也不会太容易,按照实践结合理论学习思路,我们会在最短时间内搭建起一个可用系统,这样就能够尽快建立起对学习对象的感性认识。先把玩起来,快速了解基本概念、功能和使用场景,作者特意准备一个脚本,方便大家进行快速部署单机版的K8S。
要求:双核CPU/2G内存/100G硬盘的物理机或者虚拟机,部署机器能访问外网,配置好正确的DNS。
相关教程视频参考: https://www.ixigua.com/7131294256806756901?logTag=0c9ad1aac3506f833d5e
1 通过百度网盘下载脚本k8s-mini-install.sh:
链接: https://pan.baidu.com/s/1XyC6B-0gLkTUZOLABFbqWA 密码: 5wr3
2 修改脚本的IP地址为本机的IP地址,例如192.168.3.89
sed -i "s/X.X.X.X/192.168.3.89/g" k8s-mini-install.sh
3 直接运行脚本:
. k8s-mini-install.sh
以上脚本也可以一步一步安装:
# 配置主机名
hostnamectl set-hostname k8s-master
echo "X.X.X.X k8s-master" >> /etc/hosts
# 下载docker yum源
yum install -y wget
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 增加kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
EOF
# 关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 关闭firewalld
systemctl disable firewalld --now
# 关闭交换分区
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 更新yum源
# 启用ipv4转发
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
sysctl --system
# 安装docker
yum install docker-ce-19.03.* -y
systemctl enable docker --now
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
"exec-opts":["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver":"overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
systemctl restart docker
# 安装k8s
yum install -y kubelet-1.19.6 kubeadm-1.19.6 kubectl-1.19.6
systemctl enable kubelet
kubeadm init --apiserver-advertise-address=X.X.X.X --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.6 --service-cidr=172.16.0.0/16 --pod-network-cidr=172.18.0.0/16 --ignore-preflight-errors=all
sleep 120
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
wget --no-check-certificate https://docs.projectcalico.org/v3.15/manifests/calico.yaml
kubectl apply -f calico.yaml
sleep 360
kubectl taint node k8s-master node-role.kubernetes.io/master-
kubectl get pod -n kube-system
本章节将简单熟悉部署一个简单的应用。
相关教程视频参考:https://www.ixigua.com/7131362279357940238?logTag=4a7ba45ba4ba29364f9b
执行命令:
kubectl run --image=nginx --port=80 nginx0807
这里我们通过kubectl run部署一个应用,命名为nginx0807,如下所示。docker容器的镜像通过–image制定。–port设置应用对外服务的端口。
[root@k8s-master ~]# kubectl run --image=nginx --port=80 nginx0807
pod/nginx0807 created
图1-2-1
pod是容器的集合,通常会把一组相关的容器放到一个Pod中,同一个Pod中的所有容器共享IP地址和Port空间,也就是说他们在一个network namespace中。
Pod是kubernetes调度的最小单位,同一Pod中的容器始终被一起调度。
运行kubectl get pods,查看当前的Pod,如下所示:
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx0807 1/1 Running 0 6m45s
nginx0807就是应用的Pod。
默认情况下,所有Pod只能在集群内部访问。对于上面这个例子,要访问应用只能直接访问容器的80端口。为了能够从外部访问应用,我们需要将容器的80端口映射到节点的端口。
相关教程视频参考:https://www.ixigua.com/7131362627015410212?logTag=38c241975877173007fd
执行如下命令:
kubectl expose pod nginx0807 --port=80 --target-port=80 --type="NodePort"
提示如下:
[root@k8s-master ~]# kubectl expose pod nginx0807 --port=80 --target-port=80 --type="NodePort"
service/nginx0807 exposed
[root@k8s-master ~]#
执行命令kubectl get services,可以查看应用被映射到节点的哪个端口,如下:
[root@k8s-master ~]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.16.0.1 <none> 443/TCP 17d
nginx0807 NodePort 172.16.187.184 <none> 80:31140/TCP 79s
kubernetes是默认的service,暂时不用理会,后面会讲解。nginx0807是我们应用的serivce,默认名字与pod名字一样,80端口已经映射到节点的31140端口,端口号是随机分配的,可以执行如下命令访问应用:
[root@k8s-master ~]# curl 127.0.0.1:31140
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
下一篇:2 深入理解Pod