通过kubeadm安装k8s集群

通过kubeadm安装k8s集群

kubeadm官方文档:https://kubernetes.io/zh/docs/home/

机器分布

hostnameiprole
k8s-cluster-1192.168.66.143master
k8s-cluster-2192.168.66.144worker
k8s-cluster-3192.168.66.145worker

环境处理

# 关闭防火墙、禁用SELINUX、关闭

# 关闭防火墙、禁用SELINUX、关闭swap
systemctl stop firewalld.service     #停止firewall
systemctl disable firewalld.service  #禁止firewall开机启动
iptables -F
firewall-cmd --state                 #查看防火墙状态
sudo setenforce 0                    #关闭selinux
sed -i 's#=enforcing#=disabled#g' /etc/selinux/config
swapoff -a                           # 该命令只是临时生效,需要在/etc/fstab配置文件,注释掉swap所在行的设
#一些 RHEL/CentOS 7 的用户曾经遇到过问题:由于 iptables 被绕过而导致流量无法正确路由的问题。您应该确保 在 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 被设置为 1。
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

如果不想关闭防火墙,请打开以下端口

master节点

协议方向端口范围作用使用者
TCP入站6443*Kubernetes API 服务器所有组件
TCP入站2379-2380etcd server client APIkube-apiserver, etcd
TCP入站10250Kubelet APIkubelet 自身、控制平面组件
TCP入站10251kube-schedulerkube-scheduler 自身
TCP入站10252kube-controller-managerkube-controller-manager 自身

node节点

协议方向端口范围作用使用者
TCP入站10250Kubelet APIkubelet 自身、控制平面组件
TCP入站30000-32767NodePort 服务**所有组件

安装docker

wget https://get.daocloud.io/docker | sh
或
curl -sSL https://get.daocloud.io/docker | sh

配置kubernetets源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

# 如果网络不好可以使用阿里源
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=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

安装kubernetes

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet

初始化kubernets

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.66.143 
# 参数介绍
# --apiserver-advertise-address API 服务器所公布的其正在监听的 IP 地址
# --pod-network-cidr 指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs
# --service-cidr 为服务的虚拟 IP 地址另外指定 IP 地址段

# 执行过程中需要等待一段时间,需要从kubernets的镜像仓库拉取所需要的镜像(etcd,coredns等等)
# 执行完之后会得到一串文本
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a Pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  /docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  
  #如果是非root用户,需要执行
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
  
  # 如果是root用户执行
  export KUBECONFIG=/etc/kubernetes/admin.conf
  # 记录 kubeadm init 输出的 kubeadm join 命令。 你需要此命令将节点加入集群。

以上只需要在master节点执行,执行之后会得到kubedm join 的一串提示,复制,在worker节点输入即可加入集群

如果token过期,请参考官方文档重新生成:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

官方文档:https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/

安装CNI网络插件

这里我选择是fannel

github地址:https://github.com/coreos/flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 但是由于某种原因,yml文件下载不下来,建议可以从github上把文件拷贝下来,然后复制到master节点上执行
kubectl apply -f kube-fannel.yml

加入kubernets集群

在安装好fannel之后,worker节点可以通过master节点在kube init之后生成的一串文本加入到集群中,命令如下

kubeadm join 192.168.66.143:6443 --token m36exd.thoxv1mxhbtwale8     --discovery-token-ca-cert-hash sha256:b8cd521b46c3845dcc7af249075fc47ab626ea8a202ec31a3f6ac18b3acacd4f

# 查看集群
kubectl get nodes 
NAME            STATUS   ROLES                  AGE     VERSION
k8s-cluster-1   Ready    control-plane,master   3h34m   v1.20.1
k8s-cluster-2   Ready    <none>                 3h31m   v1.20.1
k8s-cluster-3   Ready    <none>                 3h29m   v1.20.1

之后就可以使用你的kubernets集群了

故障排查

如果在init之后出现问题,通过该命令可以查看kubernets发生的异常日志

journalctl -xeu kubelet

有时候重新连接master节点之后,会提示以下,证书无法验证

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

如果是root用户,执行

cat <<EOF >> /root/.bashrc
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
source /root/.bashrc

非root用户

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 如果.kube/conf已经存在,这直接执行
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇