Ubuntu 18.04 搭建单节点 k8s 记录

Administrator 创建自 2019-06-11 09:40:32 最后修改于 5个月前

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 udpate
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-cidr: 指定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;

补充

  • kubectl taint nodes --all node-role.kubernetes.io/master- 默认 master 不允许创建 pod , 需要执行一下这个