准备
安装 Docker
上一篇文章 安装 docker
修改主机名
1
| hostnamectl set-hostname k8s-master
|
修改 /etc/hosts
1
| 192.168.140.28 api.k8s.local k8s-master
|
关闭 swap
注释 /etc/fstab
文件中 swap
分区。
添加内核参数
修改 /etc/sysctl.conf
1 2 3 4 5
| fs.file-max = 1000000
net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1
|
添加 repo 源
1 2 3 4 5 6 7 8 9 10
| 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
|
阿里云公网
1
| sed -i 's|packages.cloud.google.com|mirrors.aliyun.com/kubernetes|' /etc/yum.repos.d/kubernetes.repo
|
阿里云内网
1
| sed -i 's|https://packages.cloud.google.com|http://mirrors.cloud.aliyuncs.com/kubernetes|' /etc/yum.repos.d/kubernetes.repo
|
安装
1 2 3
| yum install -y kubeadm kubelet kubectl
systemctl enable kubelet
|
初始化 master 节点
1 2 3 4 5 6
| kubeadm init \ --kubernetes-version=1.18.2 \ --apiserver-advertise-address=192.168.140.28 \ --apiserver-bind-port 6443 \ --pod-network-cidr=10.244.0.0/16 \ --image-repository registry.aliyuncs.com/google_containers
|
当出现 Your Kubernetes control-plane has initialized successfully!
即安装成功,并且在下面有相关配置。
1 2 3
| mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
还有最后一条命令在添加 k8s node 节点时使用到
1
| kubeadm join 192.168.140.28:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
|
如果忘了保存,可以使用以下命令重新获取到
1
| kubeadm token create --print-join-command
|
这时可以使用以下命令查看节点
1 2 3
| kubectl get node
kubectl get pod -A
|
1 2
| NAME STATUS ROLES AGE VERSION k8s-master NotReady master 8m56s v1.18.2
|
这边看到状态为 NotReady
是因为未安装网络组件。
添加 node 节点
1
| kubeadm join 192.168.140.28:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
|
安装 Calico 网络
1 2 3 4
| wget --unlink -qO calico.yaml https://docs.projectcalico.org/v3.14/manifests/calico.yaml
sed -i -e "s|192.168.0.0/16|10.244.0.0/16|g" calico.yaml kubectl apply -f calico.yaml
|
完成这步之后会看到节点的状态变为 Ready
。
安装 Dashboard
1 2
| wget --unlink -qO dashboard.yaml https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml kubectl apply -f dashboard.yaml
|
一般这样是无法通过外网访问,建议在测试环境下修改 kubernetes-dashboard
的 ClusterIP
为 NodePort
将端口暴露出去。
1
| kubectl edit service kubernetes-dashboard -n kubernetes-dashboard
|
修改之后,查看 services
1
| kubernetes-dashboard kubernetes-dashboard NodePort 10.106.39.19 <none> 443:31570/TCP 36m
|
之后访问 https://${ip}:31570
发现需要 token
,下面创建一个管理员用户。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard
|
1
| kubectl apply -f admin-user.yaml
|
最后查看 token
,找到 admin-user
复制 token
即可以管理员身份访问。
1
| k describe secrets -n kubernetes-dashboard
|
其他
master 参与工作(单机部署)
1
| kubectl taint nodes --all node-role.kubernetes.io/master-
|
命令补全
1
| kubectl completion bash > /root/.kube/completion.bash.inc
|
如果使用 k
作为 kubectl
的别名,需要修改上面生成的文件,在文件末尾修改为
1 2 3 4 5 6 7
| if [[ $(type -t compopt) = "builtin" ]]; then complete -o default -F __start_kubectl kubectl complete -o default -F __start_kubectl k else complete -o default -o nospace -F __start_kubectl kubectl complete -o default -o nospace -F __start_kubectl k fi
|
最后将下面这段加入 .bash_profile
中,以使用自动补全功能。
1 2 3 4 5 6
| source /usr/share/bash-completion/bash_completion source /root/.kube/completion.bash.inc
alias k='kubectl'
|