基本信息如下:
建议不要使用 root 用户权限直接操作。为了当前用户可以使用 docker,可以执行如下命令
# 将当前用户添加到 docker 分组
sudo usermod -aG docker `whoami`
# 切换当前默认分组为 docker
newgrp docker
/etc/docker/daemon.json{
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://registry.docker-cn.com"
],
"log-driver": "json-file",
"exec-opts": ["native.cgroupdriver=systemd"],
"storage-driver": "overlay2"
}
/usr/bincat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
swapoff 和修改 /etc/fstabhostnamectl set-hostname sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common| name | site |
|---|---|
| 清华镜像站 | https://mirror.tuna.tsinghua.edu.cn |
| 阿里云 k8s 和其他谷歌镜像 | registry.cn-hangzhou.aliyuncs.com/google_containers |
| 阿里云 docker 仓库 | https://registry.cn-hangzhou.aliyuncs.com |
| 七牛 go 仓库 | https://goproxy.cn/ |
参照官方文档
如果要使用国内镜像,请参照如下配置
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo 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 update
使用如下命令,可以查看 k8s 依赖的镜像列表
kubeadm config image list --kubernetes-version v1.24.3
# demo 根据情况自己修改
# 建议在有连接外网能力的机器上执行。测试时,使用内网环境一直失败
# 如果网络不好,建议先从 harbor 下载镜像,然后把 `--image-repository` 替换成阿里镜像
# (可选)--apiserver-advertise-address 可以用来指定使用哪块网卡对外提供服务(多网卡时使用)
# (可选)--kubernetes-version 指定 kubernetes 的版本号
kubeadm init --cri-socket unix:///var/run/cri-dockerd.sock --image-repository itools-harbor.weichai.com/google_containers --pod-network-cidr=172.20.0.0/16
如果自定义了
--pod-network-cidr,则需要修改 flannel 配置文件中Network字段为相同值
如果有多个网卡,需要通过iface字段指定要使用哪个网卡用于通信
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
官方有一个控制器列表。一般会使用基于 nginx 的控制器。
nginx 控制器,常用的有三个版本:一个是 F5(商业版 nginx)团队开发的,需要付费使用;一个是 nginx 维护的开源版本;另一个是 kubernetes 维护的开源版本
因为控制器也是 pod,所以需要暴露给外部网络才可以使用。一般使用的方法有:创建 NodePort 类型的 Service;或者使用 kubectl port-forward 命令。如果是在云服务器上,还可以使用 LoadBalancer 类型的 service。
然后创建对应的 IngressClass 和 Ingress。需要注意的是,IngressClass 没有 namespace 但是 Ingress 要和对应的 Service 在同一个 namespace 下。
可以使用如下命令进行调试
kubectl port-forward -n <namespace> <pod name> <local host port>:<pod port> &
# 假设虚拟域名为 test.tt
curl -L --resolve test.tt:<local host port>:127.0.0.1 http://test.tt:<local host port>
# 创建默认配置
export out="--dry-run=client -o yaml"
kubectl create <kind> <name> <options> $out
# demo
kubectl create ing ngx-ing --rule="ngx.test/=ngx-svc:80" --class=ngx-ink $out
# 生成 pod 配置
kubectl run ngx --image=nginx:alpine $out
# 本地查看 yaml 格式说明
kubectl explain pod
kubectl explain pod.metadata
kubectl explain pod.spec.containers
# 查看 api 列表
kubectl api-resources
# 输出如下内容
# NAME SHORTNAMES APIVERSION NAMESPACED KIND