# k8s部署(Master节点)

作者平时也得工作和干活~,尽量在有空的时候不断的去更新该博客...

如果有相关问题或反馈,可以加作者微信(微信号:SPE3SRU3STAY)

# 四项准备工作:

  • 本机Hostname解析
  • 网络开关设置
  • 关闭Swap分区
  • Docker Cgroup Driver的修改

# 本机Hostname解析

1.变更主机名(假定我们把192.168.0.1这台机器的主机名叫做master,现在修改主机名)

hostnamectl set-hostname master

2.更改/etc/hostname

echo "master" > /etc/hostname

3.更改/etc/hosts,在localhost后面追加主机名:

127.0.0.1 localhost.localdomain localhost master

# 进行网络设置

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

# 关闭Swap分区

swapoff  -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 修改Docker基座的运行模式

假定您按照上一篇准备工作的文章中,调用我的远程脚本安装了Docker的基座服务,那么这一步您将什么都不用去做。

# 生成Kubernetes Master节点的初始化配置文件

kubeadm config print init-defaults > config.yaml

# 修改这个我们生成出来的config.yaml文件

vim ./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.1              #修改了这里(修改为当前节点的IP地址)
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: master                              #修改了这里(修改为上文中我们预先设定好的hostname)
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers         #修改了这里(为了国内加速,不然无法直接下载到Google的对应资源)
kind: ClusterConfiguration
kubernetesVersion: 1.22.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.100.0.0/16                            #修改了这里(我们认为设定的CIDR)
scheduler: {}

# 开始拉取Kubernetes所需的基础运行镜像

kubeadm config images pull --config=config.yaml

查看镜像是否下载好

docker images



#下载完成之后的镜像应该是这样的(数量和名称要核对清楚):

REPOSITORY                                                                    TAG       IMAGE ID       CREATED        SIZE
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver            v1.22.0   838d692cbe28   3 months ago   128MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager   v1.22.0   5344f96781f4   3 months ago   122MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy                v1.22.0   bbad1636b30d   3 months ago   104MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler            v1.22.0   3db3d153007f   3 months ago   52.7MB
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd                      3.5.0-0   004811815584   4 months ago   295MB
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns                   v1.8.4    8d147537fb7d   5 months ago   47.6MB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause                     3.5       ed210e3e4a5b   7 months ago   683kB

如果镜像下载完成,就可以进入第三阶段了!

# 执行安装命令

到此时开始,才是真正的动手安装

kubeadm init --config=config.yaml

如果中间出现了安装错误,或者人为搞错了操作,执行如下命令可以清空所有kubeadm的操作缓存,然后进行重装。命令为:kubeadm reset

出现如下提示时,代表安装成功:

[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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.0.1:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:75b93879944f5e2055e97fff426a48a6fe5c0eb91de1739886fa5864d0b12bf6

# 为Kubectl工具添加认证环境变量

在/etc/profile中最后面追加以下内容

export KUBECONFIG=/etc/kubernetes/admin.conf

(注意) 这里就是上文安装成功时,提示我们需要添加的环境变量

添加完成后,重新加载环境变量

source /etc/profile

然后测试kubectl命令

kubectl get nodes


(返回结果)
NAME     STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   4m38s   v1.22.3

查看master节点上运行的容器

kubectl get pods --all-namespaces


(返回结果)
NAMESPACE     NAME                             READY   STATUS    RESTARTS        AGE
kube-system   coredns-7d89d9b6b8-6m6mg         0/1     Pending   0               7m1s
kube-system   coredns-7d89d9b6b8-fjgl7         0/1     Pending   0               7m1s
kube-system   etcd-master                      1/1     Running   2 (5m14s ago)   7m5s
kube-system   kube-apiserver-master            1/1     Running   1 (5m15s ago)   7m5s
kube-system   kube-controller-manager-master   1/1     Running   2 (5m14s ago)   7m7s
kube-system   kube-proxy-6krm9                 1/1     Running   1 (5m22s ago)   7m1s
kube-system   kube-scheduler-master            1/1     Running   1 (5m23s ago)   7m5s

(到此为止,Master节点就已经安装成功了)








# 帮助作者改进文档

如果您喜欢这篇文档,想让它变得更好,您可以: