Ubuntu 16.04 安装Docker 和 Kubernetes

本文详细介绍了如何在Ubuntu 16.04上安装Docker和Kubernetes,包括两种Docker的安装方法、Kubernetes核心组件的安装,以及搭建Kubernetes集群的步骤。在搭建过程中,提到了预下载镜像以解决网络问题,还解决了coredns模块重启和节点加入集群时可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ubuntu 16.04 安装Docker 和 Kubernetes

安装Docker

http://www.cnblogs.com/youran-he/p/9566059.html
http://www.cnblogs.com/hackyo/p/10345715.html

方法一:

配置docker-ce的镜像源

$ sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable"
$ sudo apt update

安装docker-ce软件包

$ sudo apt install docker-ce

方法二(可以指定安装版本):

采用本地安装

首先下载docker-ce的软件包,可以在https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/找到各个版本,这里我们选择18.06.1下载。

然后使用命令安装

dpkg -i *.deb

安装Kubernetes

  • 添加Kubernetes的镜像源
# root
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF  
apt-get update
  • 安装Kubernetes的核心软件Kubeadm Kubectl Kubelet
# root
apt-get install -y kubeadm kubectl kubelet

其中 kubelet 是运行时支撑软件,kubeadm 是集群配置软件,kubectl 是集群配置软件。

PS:安装时可以通过Kubeadm=1.12.2-00指定安装版本。

搭建Kubernetes集群

  • 主节点初始化

ubernetes 除了 kubelet 之外的所有服务均由容器形式运行,因此主节点的配置其实是根据 yaml 文件的描述 pull image 和 run container 的过程,但是由于默认的所有容器从 google 服务器下载,实际上是由于网络问题,其实是不可下载的。

这里需要编写脚本从国内加速镜像预下载所需要的容器镜像,编写的脚本如下:

# replace gcr.io/google-containers/federation-controller-manager-arm64:v1.3.1-beta.1 to real image
# this will convert gcr.io/google-containers/federation-controller-manager-arm64:v1.3.1-beta.1
# to anjia0532/google-containers.federation-controller-manager-arm64:v1.3.1-beta.1 and pull it
# k8s.gcr.io/{image}/{tag} <==> gcr.io/google-containers/{image}/{tag} <==> anjia0532/google-containers.{image}/{tag}

images=$(cat img.txt)
#or
#images=$(cat <<EOF
# gcr.io/google-containers/federation-controller-manager-arm64:v1.3.1-beta.1
# gcr.io/google-containers/federation-controller-manager-arm64:v1.3.1-beta.1
# gcr.io/google-containers/federation-controller-manager-arm64:v1.3.1-beta.1
#EOF
#)

eval $(echo ${images}|
        sed 's/k8s\.gcr\.io/anjia0532\/google-containers/g;s/gcr\.io/anjia0532/g;s/\//\./g;s/ /\n/g;s/anjia0532\./anjia0532\//g' |
        uniq |
        awk '{print "docker pull "$1";"}'
       )

# this code will retag all of anjia0532's image from local  e.g. anjia0532/google-containers.federation-controller-manager-arm64:v1.3.1-beta.1
# to gcr.io/google-containers/federation-controller-manager-arm64:v1.3.1-beta.1
# k8s.gcr.io/{image}/{tag} <==> gcr.io/google-containers/{image}/{tag} <==> anjia0532/google-containers.{image}/{tag}

for img in $(docker images --format "{{.Repository}}:{{.Tag}}"| grep "anjia0532"); do
  n=$(echo ${img}| awk -F'[/.:]' '{printf "gcr.io/%s",$2}')
  image=$(echo ${img}| awk -F'[/.:]' '{printf "/%s",$3}')
  tag=$(echo ${img}| awk -F'[:]' '{printf ":%s",$2}')
  docker tag $img "${n}${image}${tag}"
  #[[ ${n} == "gcr.io/google-containers" ]] &&
  docker tag $img "k8s.gcr.io${image}${tag}"
done

其中的 image.txt 存储的是需要的镜像的下载地址和名称,对于 master 节点,其内容如下:

k8s.gcr.io/kube-apiserver:v1.12.2
k8s.gcr.io/kube-controller-manager:v1.12.2
k8s.gcr.io/kube-scheduler:v1.12.2
k8s.gcr.io/kube-proxy:v1.12.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.2

注释掉 /etc/fstab 文件里面的swap分区相关的信息,并重启系统

PS:这一步很关键,没有关闭会出现问题。

再执性主节点初始化命令

$ kubeadm init --pod-network-cidr=10.244.0.0/16

初始化完成之后,会给出三条命令需要去执行。

$ sudo cp /etc/kubernetes/admin.conf $HOME/
$ sudo chown $(id -u):$(id -g) $HOME/admin.conf
$ export KUBECONFIG=$HOME/admin.conf

从节点出现以下问题:

The connection to the server localhost:8080 was refused - did you specify the right host or port?

将主节点的文件拷贝到相同的目录下面然后执行上述命令便可以解决。

可以使用kubectl get pod --all-namespaces命令查看pods

然后部署 Kubernetes 网络插件

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果遇到 coredns 模块不断失败并重启的问题,可以查看coredns的log确定问题,我部署时遇到的问题是coredns模块会卡死在loop,通过修改相关配置文件即可
打开配置文件

$ kubectl -n kube-system edit configmap coredns 

然后注释其中的loop所在的那一行。

  • 添加从节点到集群

类似主节点的配置,从节点也需要预下载需要的 Docker image, 我们依然使用之前下载脚本,image.txt的内容修改为:

k8s.gcr.io/kube-proxy:v1.12.2
k8s.gcr.io/pause:3.1

下载镜像完成后,执行以下命令获取一个新的token,然后加入节点:

# 因为kubernetes init 初始化主节点时,输出的用于join 的 token 默认只有24小时有效期,失效后可以通过在主节点执行
$ sudo kubeadm token create --print-join-command
  • 主节点部署Dashboard

首利用脚本下载相关镜像,img.txt文件的内容为:

k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0

接下来我们需要一个kubernetes-dashboard.yaml的配置文件,可以直接在Github中下载:

$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

PS:yaml文件中kubernetes-dashboard-amd64的版本为1.10.1,本地下载的镜像为1.10.0,需要修改yaml文件。

执行以下脚本部署监控软件:

$ kubectl create -f kubernetes-dashboard.yaml

监控界面需要用户登录才可访问,为此我们需要建立相关用户,然后用该用户的 token 登录:

# 创建一个ServiceAccount
$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
EOF

#再创建一个ClusterRoleBinding,给admin-user相应的权限
$ cat <<EOF | kubectl create -f -
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: kube-system
EOF

# 查找admin-user的token
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

执行命令启动proxy

$ kubectl proxy

主节点启动浏览器,访问http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

可能会遇到的问题
[WARNING RequiredIPVSKernelModulesAvailable]: the IPVS proxier will not be used, because the following required kernel modules are not loaded: [ip_vs_wrr ip_vs_sh ip_vs ip_vs_rr] or no builtin kernel ipvs support: map[ip_vs_sh:{} nf_conntrack_ipv4:{} ip_vs:{} ip_vs_rr:{} ip_vs_wrr:{}]
you can solve this problem with following methods:
 1. Run 'modprobe -- ' to load missing kernel modules;
2. Provide the missing builtin kernel ipvs support
解决
[root]#modprobe ip_vs_rr
[root]#modprobe ip_vs_wrr
[root]#modprobe ip_vs_sh
[root]#modprobe ip_vs

https://blog.youkuaiyun.com/zhd930818/article/details/79644903
Warning  FailedScheduling  6s (x12 over 106s)  default-scheduler  0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.

解决

# kubectl taint nodes --all node-role.kubernetes.io/master-
http://blog.51cto.com/xudate/2150607

https://blog.youkuaiyun.com/wzygis/article/details/84098247

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值