目录
前言
一, 所有节点安装 docker
二, 所有节点安装 kubeadm
三, 安装 master 节点
四, 部署网络插件
五, 安装 node 节点
六, 运行一个 demo
前言
这里使用环境: Ubuntu 18.04, 以下所有操作都在 root 用户下进行
其实 kubenetes 安装非常核心的几步就是
安装 docker
安装 kubeadm
通过 kubeadm init 创建 master 节点
安装 master 的网络插件
通过 kubeadm join 添加 node 节点
一, 所有节点安装 docker
- export LC_ALL=C
- apt-get -y autoremove docker docker-engine docker.io docker-ce
- apt-get update -y
- apt-get install -y \
- apt-transport-https \
- ca-certificates \
- curl \
- software-properties-common
- curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
- add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
- apt-get update -y
- # docker 源加速
- mkdir -p /etc/docker
- echo '{"registry-mirrors":["https://pee6w651.mirror.aliyuncs.com"]}'> /etc/docker/daemon.JSON
- # 安装 docker
- apt-get install docker.io -y
- # 启动和自启动
- systemctl start docker
- systemctl enable docker
二, 所有节点安装 kubeadm
- apt-get update && apt-get install -y apt-transport-https curl
- curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
- # 配置 kubernetes 阿里源
- tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
- deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
- EOF
- apt-get update
- apt-get install -y kubelet kubeadm kubectl
- # 设置停止自动更新
- apt-mark hold kubelet kubeadm kubectl
- # kubelet 开机自启动
- systemctl enable kubelet && systemctl start kubelet
安装了 kubeadm, kubelet,kubectl,kubernetes-cni 都会被安装好
三, 安装 master 节点
安装命令如下:
kubeadm init --kubernetes-version=v1.11.3 --apiserver-advertise-address 172.18.0.1 --pod-network-cidr=10.244.0.0/16
说明
--kubernetes-version: 用于指定 k8s 版本
--apiserver-advertise-address: 用于指定使用 Master 的哪个 network interface 进行通信, 若不指定, 则 kubeadm 会自动选择具有默认网关的 interface
--pod-network-cidr: 用于指定 Pod 的网络范围. 该参数使用依赖于使用的网络方案, 本文将使用经典的 flannel 网络方案.
这里运行报错
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
我们根据提示加上 --ignore-preflight-errors=all, 再次运行
kubeadm init --kubernetes-version=v1.11.3 --apiserver-advertise-address 172.18.0.1 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all```
如果没有 FQ 的同学可能会遇到拉不下镜像来的情况, 可以通过下面命令解决
- docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.11.3
- docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.3
- docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.11.3
- docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.11.3
- docker pull mirrorgooglecontainers/pause:3.1
- docker pull mirrorgooglecontainers/etcd-amd64:3.2.18
- docker pull coredns/coredns:1.1.3
拉完后, 再 tag 为我们需要的镜像
- docker tag docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.11.3 k8s.gcr.io/kube-proxy-amd64:v1.11.3
- docker tag docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.11.3 k8s.gcr.io/kube-scheduler-amd64:v1.11.3
- docker tag docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.11.3 k8s.gcr.io/kube-apiserver-amd64:v1.11.3
- docker tag docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.3 k8s.gcr.io/kube-controller-manager-amd64:v1.11.3
- docker tag docker.io/mirrorgooglecontainers/etcd-amd64:3.2.18 k8s.gcr.io/etcd-amd64:3.2.18
- docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
- docker tag docker.io/coredns/coredns:1.1.3 k8s.gcr.io/coredns:1.1.3
安装成功后会出现 kubeadm join --token..., 这个命令就是我们用来添加节点的命令, 得记录下来
kubeadm join 172.18.0.1:6443 --token 9fvv8z.7vmiehcohwlll9tj --discovery-token-ca-cert-hash sha256:dc583faabe8bc130137507cca893fbead73a8879e5540545f2122f9a0839d6dc
还会出现第一次使用集群的配置命令, 用来将 k8s 集群的配置命令保存在用户的. kube 目录, kubectl 默认会使用这个目录授权信息访问 k8s 集群
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
根据提示执行这三条指令, 这时 kubectl 就可以正常的执行了, 我们使用 kubectl get nodes 来查看一下节点信息
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl get nodes
- NAME STATUS ROLES AGE VERSION
- vm-0-8-Ubuntu NotReady master 6m v1.11.3
显示 master 节点是 NotReady, 这是因为我们还没有安装网络插件, 可以通过 kubectl describe node 命令验证
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl describe node vm-0-8-Ubuntu
- ...
- ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
提示网络插件未就绪
再查看一下 k8s 默认的 kube-system 保留命名空间的内容
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl get pods -n kube-system
- NAME READY STATUS RESTARTS AGE
- coredns-78fcdf6894-vb9pv 0/1 Pending 0 7m
- coredns-78fcdf6894-zlkfp 0/1 Pending 0 7m
- etcd-vm-0-8-Ubuntu 1/1 Running 0 6m
- kube-apiserver-vm-0-8-Ubuntu 1/1 Running 1 7m
- kube-controller-manager-vm-0-8-Ubuntu 1/1 Running 2 8m
- kube-proxy-jcfpt 1/1 Running 0 7m
- kube-scheduler-vm-0-8-Ubuntu 1/1 Running 0
coredns 处于 pending 状态
四, 部署网络插件
kubernetes 默认支持多重网络插件如 flannel,weave,calico,
这里使用 flanne, 就必须要设置 --pod-network-cidr 参数, 10.244.0.0/16 是 kube-flannel.YAML 里面配置的默认网段, 如果需要修改的话, 需要把 kubeadm init 的 --pod-network-cidr 参数和后面的 kube-flannel.YAML 里面修改成一样的网段就可以了
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
安装完成, 再次查看 node 状态
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl get nodes
- NAME STATUS ROLES AGE VERSION
- vm-0-8-Ubuntu Ready master 9m v1.11.3
再看 master 节点, 已经变成 Ready, 再看 kube-system 的 pod
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl get pods -n kube-system
- NAME READY STATUS RESTARTS AGE
- coredns-78fcdf6894-fndmg 1/1 Running 0 2m
- coredns-78fcdf6894-nm282 1/1 Running 0 2m
- etcd-vm-0-8-Ubuntu 1/1 Running 0 2m
- kube-apiserver-vm-0-8-Ubuntu 1/1 Running 0 1m
- kube-controller-manager-vm-0-8-Ubuntu 1/1 Running 0 1m
- kube-flannel-ds-85wxw 1/1 Running 0 22s
- kube-proxy-95v4f 1/1 Running 0 2m
- kube-scheduler-vm-0-8-Ubuntu 1/1 Running 0
coredns 也正常了
默认情况 master 节点打上了 "污点", 使用的是 k8s 的 Taint/Toleration 机制, 如下
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl describe node vm-0-8-Ubuntu
- ...
- Taints: node-role.kubernetes.io/master:NoSchedule
如果我们只是需要一个单节点, 可以删除这个 Taints
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl taint nodes --all node-role.kubernetes.io/master-
- node/vm-0-8-Ubuntu untainted
五, 安装 node 节点
master 和 node 节点都运行着 kubectl, 唯一不同的是 master 需要 init, 启动 kube-apiserver,kube-scheduler,kube-controller-manager 这三个系统 Pod,
在安装完 docker 和 kubeadm 的基础上, 只需要运行 kubeadm join 命令就可以了
kubeadm join 172.18.0.1:6443 --token 9fvv8z.7vmiehcohwlll9tj --discovery-token-ca-cert-hash sha256:dc583faabe8bc130137507cca893fbead73a8879e5540545f2122f9a0839d6dc
六, 运行一个 demo
创建一个 demo.YAML, 我们使用 nginx:alpine 镜像
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: demo-deployment
- spec:
- selector:
- matchLabels:
- App: nginx
- replicas: 2
- template:
- metadata:
- labels:
- App: nginx
- spec:
- containers:
- - name: nginx
- image: nginx:alpine
- ports:
- - containerPort: 80
执行创建
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl apply -f demo.YAML
- deployment.apps/hello-deployment created
查看 pod
- root@VM-0-8-Ubuntu:/home/Ubuntu# kubectl get po
- NAME READY STATUS RESTARTS AGE
- demo-deployment-555958bc44-drwvh 1/1 Running 0 26s
- demo-deployment-555958bc44-llhr9 1/1 Running 0 26s
来源: https://www.cnblogs.com/chenqionghe/p/11483972.html