1-k8s集群安装--ubuntu18.04-k8s1.23.9
2022年8月10日 12:43
1. 查看服务器系统、内核、处理器类型
uname -a
arc
cat /proc/cpuinfo
2. 安装docker及docker-compose(1.29.2)
2.1 安装docker
apt install docker.io
# 安装完成后,查看docker版本号:
docker version
配镜像源地址及镜像存储位置root@ecs-16a0-ab86:~
vi /docker/daemon.json
# 内容如下
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"], "exec-opts":["native.cgroupdriver=systemd"],
"data-root":"/data/docker"
}
保存:wq!
#重启docker
service docker restart 或 者 systemctl restart docker
2.2 安装docker-compose
3. 安装
3.1 前置准备工作
3.1.1 使得apt支持https传输
apt-get update && apt-get install -y apt-transport-https
3.1.2 下载gpg密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
3.1.3 添加k8s镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF
3.1.4 更新源列表
apt-get update
注:直接在/etc/apt/sources.list里添加https://mirrors.aliyun.com/kubernetes/apt/是不行的,因为这个阿里镜像站使用的ssl进行传输的,所以要先安装apt-transport-https并下载镜像站的密钥才可以进行下载。
3.1.5 关闭swap
3.1.5.1 vim /etc/fstab 注释掉有swap的那一行
3.1.5.2 swapoff -a
3.1.6 处理网络问题
3.1.6.1 处理iptable
sudo modprobe br_netfilter lsmod | grep br_netfilter
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
net.ipv4.ip_forward = 1 EOF
3.1.6.2 开放端口(在云厂商的控制管理台上开放) master节点的端口如下:
node节点的端口如下:
3.2 安装kubectl, kubeadm 及kubelet
3.2.1 安装kubectl,kubeadm以及kubelet
apt-get install -y kubelet=1.23.9-00 kubeadm=1.23.9-00 kubectl=1.23.9-00
3.2.2 运行systemstart命令启动kubelet服务,并设置为开机自动启动systemctl startkubelet
systemctl enable kubelet
3.3 配置master节点
3.3.1 hostname的处理
3.3.1.1 设置hostname
3.3.1.2 更改/etc/hosts中加入ip至hostname的映射
3.3.1.3 重启下网络让/etc/hosts立即生效
service network-manager restart
3.3.2 kubeadm中init配置文件的获取与修改
3.3.2.1 获取默认的配置文件
kubeadm config print init-defaults > init-config.yaml
3.3.2.2 修改默认的配置文件init-config.yaml,修改内容如下黄色背景色标记处
apiVersion: kubeadm.k8s.io/v1beta3 bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication kind: InitConfiguration localAPIEndpoint:
advertiseAddress: 192.168.0.246
bindPort: 6443 nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
name: ecs-16a0-ab86
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {}
dns: {} etcd:
local:
dataDir: /data/k8s/etcd
#imageRepository: k8s.gcr.io
imageReposiory: registry.aliyuncs.com/google_containers kind: ClusterConfiguration
kubernetesVersion: 1.23.9
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet:10.96.0.0/12
scheduler: {}
注:"advertiseAddress: 192.168.0.246"中的ip为master节点的内网ip。"kubernetesVersion: 1.23.9",这里的版本与前面安装kubelet的版本相同。"podSubnet: 10.244.0.0/16"为pod的内网地址,"serviceSubnet: 10.96.0.0/12 为service的内网地址"。这里的10.x.x.x是A类地址的私有网段。"name: ecs-16a0-ab86"是master节点的hostname(linux可配可生效的,在linux中查询一下,然后于此处配置,同时配好ip与hostname的映射,这个在上一小节/etc/hosts中讲述了)。"dataDir: /data/k8s/etcd"因服务器中/下面只有40G,很快会内存不够,故此中更换为/data这个挂载点下磁盘空间足够的目录下。
3.3.3 kubeadm获取k8s所需镜像
镜像获取的两种方式:一用配置文件来获取;另一种直接用命令行参数来获取。 本质上是一样的。
# 3.3.3.1 用配置文件获取
kubeadm config images pull --config=init-config.yaml # 3.3.3.2 用命令行参数获取
kubeadm config images pull --kubernetes-version=v1.23.9 --image-repository=registry.aliyuncs.com/google_containers
3.3.4 网络相关处理
配置iptable(要查一下这个是干嘛的):
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 = 11
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 EOF
3.3.5 执行kubeadm init初始化
3.5.5.1 执行init初始化
kubeadm init --config=init-config.yaml
成功后会显示一个kubeadm join xx xx 的语句,供node节点加入集群中用。但这个语句中涉及的token的有效期是24h,也即意味着倘若node在24后才装或者装好,再来执行此kubeadm init的话,会提示token失效。故,可采用3.4.1的方式来新生成一个不失效的token,和获取sha256,从而用此两者信息执行kubeadm init xx xx的操作。
3.5.5.2 为了可以在master上正常访问api,即执行kubectl xx 等语句,需
要做如下设置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile source ~/.bash_profile
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.4 配置node节点
node节点与master节点同,只有一步不同即master中执行的是kubeadm
init(3.3.5 执行kubeadm init
初始化),而常规node执行的是kubeadm join。
3.4.1 在master执行
root@ecs-16a0-ab86:~# kubeadm token list root@ecs-16a0-ab86:~# kubeadm token create --ttl 0 5f9dte.oh6mckjp84elq72f
root@ecs-16a0-ab86:~# kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
5f9dte.oh6mckjp84elq72f <forever> <never> authentication,signing <none> system:bootstrappers:kubeadm:default-node-token root@ecs-16a0-ab86:~# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 48b9a7281f6ac1294365073cd3327d8f3858173c01b744a6ed8756bc65e56223
3.4.2 在node执行
kubeadm join 192.168.0.246:6443 --token 5f9dte.oh6mckjp84elq72f --discovery-token-ca-cert-hash
sha256:48b9a7281f6ac1294365073cd3327d8f3858173c01b744a6ed8756bc65e56223
3.4.3 将k8s的master节点也作为一个工作节点
kubectl taint nodes --all node-role.kubernetes.io/master-
来自<https://v1-23.docs.kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/>
3.5 安装网络插件
安装网络插件:
# 3.5.1 下载calico的配置文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O
# 3.5.2 更改配置文件,新增两行配置(否则calico在选网卡时可能会选错)
- name: IP_AUTODETECTION_METHOD
value: "cidr=192.168.3.0/24"
建议用这个
# 3.5.3 应用配置安装calico网络处理器
kubectl apply -f calico.yaml #注,倘若是要更改calico.yaml后更新calico网络处理器的话,就: kubectl replace -f calico.yaml 即可。查看node信息:
kubectl get nodes
验证集群是否工作正常:
kubectl get pods --all-namespaces
倘若发现有状态错误的Pod,则可以运行kubectl --namespace=kube-system describe pod <pod_name> 查看错误原因。
程玉婷 写于 202208
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!