小白指南-kubeadm部署K8S集群1.14.3

本文详细介绍了K8S集群的搭建过程。首先进行环境准备,包括主机规划、关闭防火墙等操作;接着进行安装,如准备源、安装docker和kube相关组件、拉取镜像等;然后进行master初始化,完成后配置加载并查看集群状态;最后安装flannel网络,让node节点加入集群,还提及主节点参与负载的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、环境准备

  • 主机规划

hostname

IP

CentOS

部署

pod网段

service网段

k8s-master

192.168.2.51

7.6

docker , kubeadm, kubelet , kubectl

10.1.0.0/16

172.16.0.0/16

k8s-node01

192.168.2.52

7.6

docker , kubeadm , kubelet

10.1.0.0/16

172.16.0.0/16

k8s-node02

192.168.2.53

7.6

docker , kubeadm , kubelet

10.1.0.0/16

172.16.0.0/16

  • 节点检查:主机名、MAC、uuid唯一

hostname

ip link 或 ifconfig -a

cat /sys/class/dmi/id/product_uuid

  • 关闭防火墙(所有节点)

systemctl stop firewalld && systemctl disable firewalld

  • 关闭selinux(所有节点)

setenforce 0 && sed -i 's/enforcing/disabled/g' /etc/selinux/config

  • 同步服务器时间(所有节点)

yum install ntpdate -y && ntpdate ntp.api.bz

#先用ntpdate强制同步时间,然后配置ntpd服务持续同步

  • 关闭swap(所有节点)

swapoff -a && sed -i 's/^.*swap/#&/g' /etc/fstab

#永久关闭swap,在/etc/fstab 中含有swap的行前加#

  • 集群所有节点可以互相解析(所有节点)

cat <<EOF >> /etc/hosts

192.168.2.51 k8s-master

192.168.2.52 k8s-node01

192.168.2.53 k8s-node02

EOF

  • master对node节点ssh公钥分发(master)

ssh-keygen

ssh-copy-id k8s-node01

ssh-copy-id k8s-node02

  • 系统参数调整(所有节点)

cat <<EOF > /etc/sysctl.d/k8s.conf

net.ipv4.ip_forward = 1

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

EOF

sysctl -p

 

2、安装

  • 准备源(所有节点)

yum install -y wget &&cd /etc/yum.repos.d/ && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

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

 

scp /etc/yum.repos.d/{docker-ce.repo,kubernetes.repo} k8s-node01:/etc/yum.repos.d/

scp /etc/yum.repos.d/{docker-ce.repo,kubernetes.repo} k8s-node02:/etc/yum.repos.d/

 

  • yum安装docker和kube相关

yum install -y docker-ce kubelet kubeadm kubectl #master

yum install -y docker-ce kubelet kubeadm #node*

  • 启动docker,添加镜像加速(所有节点)

systemctl start docker && systemctl enable docker

登陆阿里云https://cr.console.aliyun.com/(需要注册),获取到专属加速地址:https://xxxxxx.mirror.aliyuncs.com

tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"] } EOF systemctl daemon-reload && systemctl restart docker

systemctl enable kubelet && systemctl restart kubelet

  • 拉取镜像(所有节点)

查看kube*版本

yum list kube*

根据版本配置下述脚本,指定需拉取的镜像的版本

tee /root/getimage.sh <<-'EOF' echo "Pull Kubernetes v1.14.2 Images from aliyuncs.com ......"

MY_REGISTRY=registry.cn-hangzhou.aliyuncs.com/openthings

## 拉取镜像

docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-apiserver:v1.14.2

docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-controller-manager:v1.14.2

docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-scheduler:v1.14.2

docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-proxy:v1.14.2

docker pull ${MY_REGISTRY}/k8s-gcr-io-etcd:3.3.10

docker pull ${MY_REGISTRY}/k8s-gcr-io-pause:3.1

docker pull ${MY_REGISTRY}/k8s-gcr-io-coredns:1.3.1

## 添加Tag

docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2

docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2

docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2

docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2

docker tag ${MY_REGISTRY}/k8s-gcr-io-etcd:3.3.10 k8s.gcr.io/etcd:3.3.10

docker tag ${MY_REGISTRY}/k8s-gcr-io-pause:3.1 k8s.gcr.io/pause:3.1

docker tag ${MY_REGISTRY}/k8s-gcr-io-coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

echo "Pull Kubernetes v1.14.2 Images FINISHED."

EOF

PS:yum安装的kube*相关版本为1.14.3,但阿里镜像库里最新的为1.14.2,所以此脚本k8s-gcr-io-kube-*采用版本v1.14.2

chmod +x /root/getimage.sh && /root/getimage.sh

查看镜像:docker images

  • master初始化(master)

kubeadm init --kubernetes-version=v1.14.2 --apiserver-advertise-address=192.168.2.51 --pod-network-cidr=10.1.0.0/16 --service-cidr=172.16.0.0/16

执行 kubeadm init时:

  1. 自动化的集群机器合规检查
  2. 自动化生成集群运行所需的各类证书及各类配置,并将Master节点信息保存在名为cluster-info的ConfigMap中。
  3. 通过static Pod方式,运行API server, controller manager 、scheduler及etcd组件。
  4. 生成Token以便其他节点加入集群
  5. 执行 kubeadm join时:
  6. 节点通过token访问kube-apiserver,获取cluster-info中信息,主要是apiserver的授权信息(节点信任Master)。
  7. 通过授权信息,kubelet可执行TLS bootstrapping,与apiserver真正建立互信任关系(Master信任节点)。

简单来说,kubeadm做的事就是把大部分组件都容器化,并通过StaticPod方式运行,同时大大简化了集群的配置及认证等工作。

初始化完成:

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:

https://kubernetes.io/docs/concepts/cluster-administration/addons/

 

Then you can join any number of worker nodes by running the following on each as root:

 

kubeadm join 192.168.2.51:6443 --token ssgjgk.wkyzh31xk4vsjdbf \

--discovery-token-ca-cert-hash sha256:072e10437de940fbc0f7203abb86c9b85d8c2e0d7af8dcf5e1e7d85154f1139b

 

上述红色字体部分为node节点加入命令

 

配置加载:

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

 

查看集群状态:kubectl get cs

NAME STATUS MESSAGE ERROR

scheduler Healthy ok

controller-manager Healthy ok

etcd-0 Healthy {"health":"true"}

 

查看节点:kubectl get node

NAME STATUS ROLES AGE VERSION

k8s-master NotReady master 46m v1.14.3

 

查看pod状态

kubectl get pod --all-namespaces -o wide

coredns显示为pending状态

 

flannel网络安装(master)

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f kube-flannel.yml

 

再次查看pod状态(等待几分钟)

kubectl get pod --all-namespaces -o wide

coredns显示为running

 

node节点加入集群(node*)

kubeadm join 192.168.2.51:6443 --token ssgjgk.wkyzh31xk4vsjdbf \

--discovery-token-ca-cert-hash sha256:072e10437de940fbc0f7203abb86c9b85d8c2e0d7af8dcf5e1e7d85154f1139b

 

[root@k8s-master ~]# kubectl get nodes

NAME STATUS ROLES AGE VERSION

k8s-master Ready master 4h50m v1.14.3

k8s-node01 Ready <none> 35m v1.14.3

k8s-node02 Ready <none> 35m v1.14.3

 

PS:如果要主节点同时作为工作节点,参与负载。

查看master状态:kubectl describe node k8s-master | grep Taint Taints: node-role.kubernetes.io/master:NoSchedule

修改Taints,以使master加入调度:

kubectl taint node k8s-master node-role.kubernetes.io/master-

修改Taints,以使master退出调度:

kubectl taint node k8s-master node-role.kubernetes.io/master=:NoSchedule

 

kubectl taint node [node] key=value[effect] 其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]

NoSchedule: 一定不能被调度

PreferNoSchedule: 尽量不要调度

NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值