以下是"kubeadm 搭建 K8s的详细过程"的攻略。
准备工作
在开始kubeadm搭建Kubernetes之前,需要先完成以下准备工作:
- 首先确认已经在所有节点(Master节点和Worker节点)上安装好了系统,并且所有节点可以通过ssh互相访问。
- 各节点的主机名必须确保是正确的,不能是localhost或127.0.0.1。
- 确认某个节点将作为Master节点。Master节点需要满足额外的一些配置和要求,例如安装docker和kubeadm等软件包。
- 需要为所有节点配置时钟同步时间,确保各节点之间的时间同步相当,否则可能造成Pod无法启动的问题。
- 在Master节点上关闭swap分区,这是因为Kubernetes使用的是CNI网络模型,在swap分区下可能会出现一些奇怪的网络问题。
- 在Master节点上关闭防火墙或者允许Kubernetes相关端口的流量能够通过。
安装docker和kubeadm
在Master节点上,安装docker和kubeadm等软件包:
# 首先安装必要的工具
$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl
# 安装Docker CE
$ curl -s https://get.docker.com | bash -
# 安装kubeadm、kubelet和kubectl
$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本
上面的操作在每个节点上需要都进行。
初始化Master节点
在Master节点上运行以下命令,使用kubeadm初始化Kubernetes集群:
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
该命令将进行以下操作:
- 拉取所有必需的镜像(从gcr.io/google_containers镜像库)。
- 配置各组件之间的加密通信。
- 部署API Server、Control Plane和CNI插件。
- 生成bootstrap token。
执行命令后,将会输出类似以下的信息:
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 10.13.50.12:6443 --token xxxxxxx.xxxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
其中,我们需要记录下token和discovery-token-ca-cert-hash这两个参数。这些都是在其他节点加入集群时需要的。
为了方便操作,执行以下命令配置kubectl命令,将自动包含集群凭证:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
确认kubelet已经在Master节点上正确地启动:
$ kubectl get nodes
输出信息中将会有该节点,状态是Ready。
安装网络插件
Kubernetes需要一个网络插件控制IP地址分配和路由管理。本教程中我们选择CNI插件。
为了部署CNI插件,我们执行以下命令:
$ kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
该插件将被部署到kube-system命名空间下。执行下面的命令,观察Pod是否已经正确启动:
$ kubectl get pods -n kube-system
加入Worker节点
在Worker节点上,使用从Master节点获得的参数,通过kubeadm加入到集群中:
$ sudo kubeadm join 10.13.50.12:6443 --token xxxxxxx.xxxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
提示加入成功后,可以返回到Master节点,使用以下命令观察节点是否连接成功:
$ kubectl get nodes
输出信息中应该能看到所有节点。
示例1:部署nginx
使用Deployment部署nginx服务:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.9
ports:
- containerPort: 80
执行以下命令部署:
$ kubectl apply -f nginx-deploy.yaml
查看Deployment状态:
$ kubectl get deployment nginx-deploy
输出结果如下:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 2/2 2 2 99s
示例2:部署Redis
同样的方式,我们可以定义Deployment对象部署Redis服务。
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deploy
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:5.0-alpine
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 6379
在执行:
$ kubectl apply -f redis-deploy.yaml
同样检查状态:
$ kubectl get deployment redis-deploy
输出结果如下:
NAME READY UP-TO-DATE AVAILABLE AGE
redis-deploy 1/1 1 1 5s
以上就是"kubeadm 搭建 K8s的详细过程"的攻略了,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:kubeadm 搭建 K8s的详细过程 - Python技术站