Ubuntu 18.04 搭建单节点 k8s 记录 (不需要科学上网的方案)
ubuntu 安装 k8s
安装环境
- 阿里云服务器: 1C2G
- ubuntu 18.04
- kubernetes 1.14.2
# 设置环境变量, 命令行看着舒服点
export PS1="\[\033[33m\]\u\[\033[0m\]@\[\033[36m\]k8s\[\033[0m\]:\[\033[32m\]\W \[\033[0m\]$ "
# vim 显示行号
cat <<EOF > ~/.vimrc
set nu
EOF
# 一些初始配置
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common
# 写入两个 key
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# 添加镜像源
cat <<EOF >/etc/apt/sources.list.d/docker-k8s.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable
EOF
# 更新并安装
apt update && apt install -y docker-ce kubelet kubeadm kubectl
# 关闭 swap
swapoff -a
vim /etc/fstab # 注释 01
# 设置阿里云镜像加速, 也可以不用弄这个
cat <<EOF >/etc/docker/daemon.json
{
"registry-mirrors": ["https://{阿里云分配的地址}.mirror.aliyuncs.com"]
}
EOF
# 安装镜像包
kubeadm config images list # 注释 03
# 初始化
kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU # 注释 02
# 根据初始化之后输出的内容, 使用这个命令将其他节点加入集群
# 设置网络插件
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 安装 kubernetes-dashboard
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/alternative/kubernetes-dashboard.yaml
# 拉取 kubernetes-dashboard 镜像, 注意版本, 可在 kubernetes-dashboard.yaml 文件中查看
docker pull registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
docker tag registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
docker rmi registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
# 安装 kubernetes-dashboard
kubectl create -f kubernetes-dashboard.yaml
# 查看安装结果
kubectl get pod --namespace=kube-system
# 直接为 Dashboard 赋予 Admin 的权限
# 新建 dashboard-admin.yaml 文件, 注意缩进
cat <<EOF > dashboard-admin.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
EOF
# 安装
kubectl create -f dashboard-admin.yaml
# 查看端口
kubectl get svc --namespace=kube-system
# 单节点情况下, 无法操作节点
kubectl taint nodes --all node-role.kubernetes.io/master-
## END ######################################################
# 不直接为 Dashboard 赋予 Admin 的权限
# 创建账户
kubectl create serviceaccount k8sadmin -n kube-system
kubectl create clusterrolebinding k8sadmin --clusterrole=cluster-admin --serviceaccount=kube-system:k8sadmin
# 查看账号是否建立成功
kubectl get sa --all-namespaces
# 获取 Token 登陆
kubectl get secret -n kube-system | grep k8sadmin | cut -d " " -f1 | xargs -n 1 | xargs kubectl get secret -o 'jsonpath={.data.token}' -n kube-system | base64 --decode
# 端口转发, kubernetes-dashboard-54fb766c84-psnrh 是通过 `kubectl get pod --namespace=kube-system` 查出来的
kubectl port-forward kubernetes-dashboard-54fb766c84-psnrh 8443:8443 --namespace=kube-system &
注释 01
# 注释掉这一行
# /swapfile none swap sw 0 0
注释 02
init 常用主要参数:
–kubernetes-version
: 指定Kubenetes版本,如果不指定该参数,会从google网站下载最新的版本信息。–pod-network-cid
r: 指定pod网络的IP地址范围,它的值取决于你在下一步选择的哪个网络网络插件,比如我在本文中使用的是 flannel 网络,需要指定为10.244.0.0/16。–apiserver-advertise-address
: 指定master服务发布的Ip地址,如果不指定,则会自动检测网络接口,通常是内网IP。kubeadm init 输出的token用于master和加入节点间的身份认证,token是机密的,需要保证它的安全,因为拥有此标记的人都可以随意向集群中添加节点。
如果只有一个 cpu 请加参数:
--ignore-preflight-errors=NumCPU
注释 03
k8s-pull.sh
# 将对应的包, 从国内镜像上拉下来
for i in `kubeadm config images list`; do
imageName=${i#k8s.gcr.io/}
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
本作品采用《CC 协议》,转载必须注明作者和本文链接
:+1: :+1:
请问这个问题怎么解决 This error is likely caused by: - The kubelet is not running - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)