1-k8s集群安装--ubuntu18.04-k8s1.23.9

 

2022年8月10日         12:43

 

1.  查看服务器系统、内核、处理器类型

uname -a

arc

cat /proc/cpuinfo

 

2.  安装dockerdocker-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中加入iphostname的映射

 

3.3.1.3   重启下网络让/etc/hosts立即生效

 

service network-manager restart

 

3.3.2  kubeadminit配置文件的获取与修改

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"中的ipmaster节点的内网ip"kubernetesVersion: 1.23.9",这里的版本与前面安装kubelet的版本相同。"podSubnet: 10.244.0.0/16"pod的内网地址,"serviceSubnet: 10.96.0.0/12 service的内网地址"。这里的10.x.x.xA类地址的私有网段。"name: ecs-16a0-ab86"master节点的hostname(linux可配可生效的,在linux中查询一下,然后于此处配置,同时配好iphostname的映射,这个在上一小节/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  k8smaster节点也作为一个工作节点

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

posted @   時窥  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示