/etc/hosts
文件,将所有机器配置成通过主机名可以访问。cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
Ubuntu
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
CentOS
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
查看
kubectl version --client
你需要在每台机器上安装以下的软件包:
kubeadm
:用来初始化集群的指令。kubelet
:在集群中的每个节点上用来启动 Pod 和容器等。kubectl
:用来与集群通信的命令行工具。Kind 文档 https://kind.sigs.k8s.io/docs/user/quick-start/
基于 Docker 而不是虚拟化
Kind 不是打包一个虚拟化镜像,而是直接讲 K8S 组件运行在 Docker。带来了什么好处呢?
支持多节点 K8S 集群和 HA
Kind 支持多角色的节点部署,你可以通过配置文件控制你需要几个 Master 节点,几个 Worker 节点,以更好的模拟生产中的实际环境。
查看环境变量
echo $PATH
下载
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.10.0/kind-linux-amd64
chmod +x ./kind
cp ./kind /usr/local/sbin
查看安装情况
kind version
最简单的情况,我们使用一条命令就能创建出一个单节点的 K8S 环境
kind create cluster
删除
kind delete cluster
可是呢,默认配置有几个限制大多数情况是不满足实际需要的,默认配置的主要限制如下:
这边提供一个配置文件来解除上诉的限制:
创建配置文件
vi kind.yaml
内容如下
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
apiServerAddress: "192.168.10.39"
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://tiaudqrq.mirror.aliyuncs.com"]
注意
apiServerAddress
配置局域网 IP 或想监听的 IPhttps://tiaudqrq.mirror.aliyuncs.com
配置 Docker Hub 加速镜像站点
之后运行
kind create cluster --config kind.yaml
如果长时间卡在 Ensuring node image (kindest/node:v1.18.2)
这个步骤,可以使用
docker pull kindest/node:v1.18.2
来得到镜像拉取进度条。
切换 kubectl 集群上下文
kubectl cluster-info --context kind-kind
查看节点
kubectl get nodes
查看集群运行情况
kubectl get po -n kube-system
首先配置好 Deployment 的配置文件(这里用的是 nginx 镜像)
创建文件夹
mkdir /root/k8s
cd /root/k8s
vi app.yaml
[ app.yaml ]
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
selector:
matchLabels:
app: web
replicas: 1
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx
ports:
- containerPort: 80
通过 kubectl 命令创建服务
创建
kubectl create -f app.yaml
等待一会后,查看 Pod 调度、运行情况。
我看可以看到 Pod 的名字、运行状态、Pod 的 ip、还有所在Node的名字等信息
kubectl get Pods -o wide
启动成功 READY
的状态会是1/1
如果不是,查看pod启动失败的原因
kubectl describe pod web
删除
kubectl delete -f app.yaml
通过上面创建的 Deployment 我们还没法合理的访问到应用,下面我们就创建一个 service 作为我们访问应用的入口。
首先创建service配置
vi service.yaml
[ service.yaml ]
apiVersion: v1
kind: Service
metadata:
name: web
spec:
ports:
- port: 8888 # 服务端口
protocol: TCP
targetPort: 80 # 容器端口
selector:
app: web # 标签选择器,这里的app=web正是我们刚才建立app
创建服务
kubectl create -f service.yaml
提示创建成功
service/web created
查看服务
kubectl get service
结果
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 8m46s web ClusterIP 10.110.17.179 8888/TCP 2m38s
访问服务
接下来就可以在任意节点通过ClusterIP负载均衡的访问后端应用了
通过 kubectl port-forward
端口转发的方式访问 K8S 中的应用
kubectl port-forward service/web 7000:8888
访问
curl http://localhost:7000
访问成功返回
HTTP/1.1 200 OK Server: nginx/1.19.6 Date: Thu, 25 Feb 2021 10:50:57 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 15 Dec 2020 13:59:38 GMT Connection: keep-alive ETag: “5fd8c14a-264” Accept-Ranges: bytes