<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Install_and_Configure_Kubernetes_%28k8s%29_on_ubuntu</id>
	<title>Install and Configure Kubernetes (k8s) on ubuntu - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Install_and_Configure_Kubernetes_%28k8s%29_on_ubuntu"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Install_and_Configure_Kubernetes_(k8s)_on_ubuntu&amp;action=history"/>
	<updated>2026-04-20T10:53:33Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.linuxsa.org/index.php?title=Install_and_Configure_Kubernetes_(k8s)_on_ubuntu&amp;diff=482&amp;oldid=prev</id>
		<title>Evan：​/* .Install using the repository on debian */</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Install_and_Configure_Kubernetes_(k8s)_on_ubuntu&amp;diff=482&amp;oldid=prev"/>
		<updated>2020-03-03T10:03:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;.Install using the repository on debian&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=pre=&lt;br /&gt;
搞个离线的吧 可以先学习着 &lt;br /&gt;
&lt;br /&gt;
[[K8s镜像]]&lt;br /&gt;
&lt;br /&gt;
=info=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
这次是18.04  master 58; n1 59; n2 60 #Mon May 27 07:44:35 UTC 2019&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
每台机器最少2GB内存，2CPUs。&lt;br /&gt;
集群中所有机器之间网络连接正常。&lt;br /&gt;
打开相应的端口，详见： [ Check required ports https://kubernetes.io/docs/setup/independent/install-kubeadm/#check-required-ports]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kubernetes要求集群中所有机器具有不同的Mac地址、产品uuid、Hostname。可以使用如下命令查看：&lt;br /&gt;
&lt;br /&gt;
# UUID&lt;br /&gt;
 cat /sys/class/dmi/id/product_uuid&lt;br /&gt;
&lt;br /&gt;
# Mac地址&lt;br /&gt;
 ip link&lt;br /&gt;
&lt;br /&gt;
# Hostname&lt;br /&gt;
 cat /etc/hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ubuntu 16.04&lt;br /&gt;
&lt;br /&gt;
master 67  allon vbox &lt;br /&gt;
node1   66  node2   65&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://mirrors.163.com/ubuntu-releases/16.04.6/&lt;br /&gt;
&lt;br /&gt;
[[使用kubeadm离线部署kubernetesv1.9.0]]&lt;br /&gt;
&lt;br /&gt;
=Set Hostname and update hosts file=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo hostnamectl set-hostname &amp;quot;k8s-master&amp;quot;&lt;br /&gt;
sudo hostnamectl set-hostname k8s-node1&lt;br /&gt;
sudo hostnamectl set-hostname k8s-node2&lt;br /&gt;
&lt;br /&gt;
#Add the following lines in /etc/hosts file on all three systems,&lt;br /&gt;
&lt;br /&gt;
192.168.88.30     k8s-master&lt;br /&gt;
192.168.88.31     k8s-node1&lt;br /&gt;
192.168.88.32    k8s-node2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
192.168.88.58     k8s-master #k8sumaster1&lt;br /&gt;
192.168.88.59     k8s-node1 #k8sun1&lt;br /&gt;
192.168.88.60    k8s-node2 #k8sun2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Ubuntu配置网络和hostname]]&lt;br /&gt;
&lt;br /&gt;
=翻墙=&lt;br /&gt;
[[Ubuntu利用shadowsocks和polipo终端翻墙]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat /etc/profile #最好就是这个写成 polipo那台机器的IP就行了，其它机器就不用再搞 ss  polipo了&lt;br /&gt;
#这个如何自启动加载呢 不然 notready&lt;br /&gt;
export http_proxy=&amp;quot;http://127.0.0.1:8123/&amp;quot;&lt;br /&gt;
export https_proxy=$http_proxy&lt;br /&gt;
#export no_proxy=&amp;quot;localhost,127.0.0.1,192.168.88.58,10.96.0.0,10.224.0.0&amp;quot;&lt;br /&gt;
 export no_proxy=&amp;quot;localhost,127.0.0.1,192.168.88.58,10.96.0.0,10.224.0.0,10.224.*&amp;quot;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果不想翻墙 请参考[https://www.cnblogs.com/RainingNight/p/using-kubeadm-to-create-a-cluster-1-12.html 使用Kubeadm搭建Kubernetes(1.12.2)集群]&lt;br /&gt;
&lt;br /&gt;
=ins docker=&lt;br /&gt;
 apt-get install docker.io -y #only 4 ubuntu  ;docker-compose 直接用官方的二进制包 &lt;br /&gt;
&lt;br /&gt;
==debian9 or 10==&lt;br /&gt;
&lt;br /&gt;
===.Install using the repository on debian ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
apt  install software-properties-common&lt;br /&gt;
&lt;br /&gt;
apt-get remove docker docker-engine docker.io containerd runc&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
    apt-transport-https \&lt;br /&gt;
    ca-certificates \&lt;br /&gt;
    curl \&lt;br /&gt;
    gnupg2 \&lt;br /&gt;
    software-properties-common -y &lt;br /&gt;
&lt;br /&gt;
 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
 sudo apt-key fingerprint 0EBFCD88&lt;br /&gt;
 sudo add-apt-repository    &amp;quot;deb [arch=amd64] https://download.docker.com/linux/debian \&lt;br /&gt;
   $(lsb_release -cs) \&lt;br /&gt;
   stable&amp;quot;&lt;br /&gt;
 apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://docs.docker.com/install/linux/docker-ce/debian/&lt;br /&gt;
&lt;br /&gt;
===2.install-from-a-package on debian===&lt;br /&gt;
&lt;br /&gt;
Go to https://download.docker.com/linux/debian/dists/, choose your Debian version, browse to pool/stable/, choose either amd64 or armhf, and download the .deb file for the Docker CE version you want to install.&lt;br /&gt;
&lt;br /&gt;
I am  stretch so&lt;br /&gt;
 apt install libltdl7&lt;br /&gt;
&lt;br /&gt;
http://mirrors.aliyun.com/docker-ce/linux/debian/dists/stretch/pool/stable/amd64/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Docker入门]]&lt;br /&gt;
&lt;br /&gt;
=docker代理设置=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#不要少了开头的service 还要记得check一个代理成功不&lt;br /&gt;
mkdir -p /etc/systemd/system/docker.service.d&lt;br /&gt;
vi /etc/systemd/system/docker.service.d/http-proxy.conf&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;HTTPS_PROXY=http://127.0.0.1:8123/&amp;quot; &amp;quot;HTTP_PROXY=http://127.0.0.1:8123/&amp;quot; &amp;quot;NO_PROXY=localhost,127.0.0.1,192.168.88.67,10.96.0.0,10.224.0.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Environment=&amp;quot;HTTP_PROXY=http://proxy.example.com:80/&amp;quot; &amp;quot;HTTPS_PROXY=http://proxy.example.com:80/&amp;quot;&amp;quot;NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl restart docker &lt;br /&gt;
systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
systemctl show --property=Environment docker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
other&lt;br /&gt;
evan@k8s-master:~$ sudo systemctl enable docker &lt;br /&gt;
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.&lt;br /&gt;
Executing: /lib/systemd/systemd-sysv-install enable docker&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[https://docs.docker.com/config/daemon/systemd/ docker http-proxy]&lt;br /&gt;
&lt;br /&gt;
[https://www.jianshu.com/p/1cb70b8ea2d7 docker 代理设置]&lt;br /&gt;
&lt;br /&gt;
[https://blog.frognew.com/2017/01/docker-http-proxy.html docker代理配置-透过代理服务器pull镜像]&lt;br /&gt;
&lt;br /&gt;
[http://silenceper.com/blog/201809/over-the-wall-pull-docker-mirror/ docker pull 翻墙下载镜像]&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/northeastsqure/article/details/60143144 docker设置代理]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/atuotuo/p/7298673.html docker - 设置HTTP/HTTPS 代理]&lt;br /&gt;
&lt;br /&gt;
=ins 在所有节点上=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
swapoff -a;  sudo usermod -a -G docker $USER&lt;br /&gt;
&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get install -y apt-transport-https curl&lt;br /&gt;
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/apt/sources.list.d/kubernetes.list&lt;br /&gt;
deb https://apt.kubernetes.io/ kubernetes-xenial main&lt;br /&gt;
EOF&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install -y kubelet kubeadm kubectl&lt;br /&gt;
apt-mark hold kubelet kubeadm kubectl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#init  之前不要启动&lt;br /&gt;
#systemctl start kubelet&amp;amp;&amp;amp;  systemctl enable kubelet.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
启动不了&lt;br /&gt;
原来是kubelet 的cgroup dirver 与 docker的不一样。docker默认使用cgroupfs,keubelet 默认使用systemd。&lt;br /&gt;
&lt;br /&gt;
https://kubernetes.io/docs/setup/cri/&lt;br /&gt;
#这个有改的 18.04上成功了的&lt;br /&gt;
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf &lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt&amp;quot;&lt;br /&gt;
Environment=&amp;quot;KUBELET_CADVISOR_ARGS=--cadvisor-port=0&amp;quot;&lt;br /&gt;
Environment=&amp;quot;KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl daemon-reload &amp;amp;&amp;amp; systemctl restart kubelet &amp;amp;&amp;amp;  systemctl enable kubelet.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=在 Master 节点上配置 kubelet 所需的 cgroup 驱动=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
使用 Docker 时，kubeadm 会自动为其检测 cgroup 驱动在运行时对 /var/lib/kubelet/kubeadm-flags.env 文件进行配置。 &lt;br /&gt;
如果您使用了不同的 CRI， 您得把 /etc/default/kubelet 文件中的 cgroup-driver 位置改为对应的值，像这样：&lt;br /&gt;
&lt;br /&gt;
KUBELET_EXTRA_ARGS=--cgroup-driver=&amp;lt;value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这个文件将会被 kubeadm init 和 kubeadm join 用于为 kubelet 获取 额外的用户参数。&lt;br /&gt;
&lt;br /&gt;
请注意，您只需要在您的 cgroup driver 不是 cgroupfs 时这么做，因为 cgroupfs 已经是 kubelet 的默认值了。&lt;br /&gt;
&lt;br /&gt;
systemctl daemon-reload; systemctl restart kubelet #需要重启 kubelet：&lt;br /&gt;
&lt;br /&gt;
#me &lt;br /&gt;
evan@k8s-master:~$ cat /var/lib/kubelet/kubeadm-flags.env &lt;br /&gt;
KUBELET_KUBEADM_ARGS=--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1 --resolv-conf=/run/systemd/resolve/resolv.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=初始化master=&lt;br /&gt;
&amp;lt;pre&amp;gt; #14:25:52--14:47:55 kubelet 其实是没启动的 在init之前 &lt;br /&gt;
 kubeadm init   --apiserver-advertise-address=192.168.88.30  --pod-network-cidr=10.224.0.0/16 # --apiserver-advertise-address=masterip&lt;br /&gt;
&lt;br /&gt;
kubeadm join 192.168.88.58:6443 --token fuwhe0.ro0c8u82u4xtmn8q \&lt;br /&gt;
    --discovery-token-ca-cert-hash sha256:83bd9c19486c44fde674f4ccf0a7382848cd7bfeff8c361d54e7a2955a4dbd60&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you are the root user, you can run:&lt;br /&gt;
&lt;br /&gt;
export KUBECONFIG=/etc/kubernetes/admin.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
另外有一个小技巧，在init的过程中，另开一个终端，运行&lt;br /&gt;
&lt;br /&gt;
journalctl -f -u kubelet.service&lt;br /&gt;
&lt;br /&gt;
可以查看具体是什么愿意卡住了&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=配置kubectl认证信息=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat  /etc/sudoers.d/evan&lt;br /&gt;
echo &amp;#039;evan ALL=(ALL) NOPASSWD:NOPASSWD:ALL&amp;#039; &amp;gt; /etc/sudoers.d/evan&lt;br /&gt;
&lt;br /&gt;
su - evan &lt;br /&gt;
mkdir -p $HOME/.kube&lt;br /&gt;
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&lt;br /&gt;
  sudo chown $(id -u):$(id -g) $HOME/.kube/config&lt;br /&gt;
echo &amp;quot;source &amp;lt;(kubectl completion bash)&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
exit &lt;br /&gt;
&lt;br /&gt;
# 对于root用户 这省不能少 不然  #  kubectl  apply -f kube-flannel.yml  The connection to the server localhost:8080 was refused - did you specify the right host or port?&lt;br /&gt;
&lt;br /&gt;
export KUBECONFIG=/etc/kubernetes/admin.conf&lt;br /&gt;
#也可以直接放到~/.bash_profile&lt;br /&gt;
echo &amp;quot;export KUBECONFIG=/etc/kubernetes/admin.conf&amp;quot; &amp;gt;&amp;gt; ~/.bash_profile&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=安装pod网络on master=&lt;br /&gt;
#普通用户 不要翻墙&lt;br /&gt;
 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml&lt;br /&gt;
&lt;br /&gt;
=添加节点=&lt;br /&gt;
不要翻墙了 新起个窗口&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubeadm join 192.168.88.58:6443 --token fuwhe0.ro0c8u82u4xtmn8q \&lt;br /&gt;
    --discovery-token-ca-cert-hash sha256:83bd9c19486c44fde674f4ccf0a7382848cd7bfeff8c361d54e7a2955a4dbd60 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
evan@k8s-master:~$ kubectl get nodes&lt;br /&gt;
NAME   STATUS     ROLES    AGE     VERSION&lt;br /&gt;
k8s    NotReady   master   5h12m   v1.14.2&lt;br /&gt;
u16    NotReady   &amp;lt;none&amp;gt;   106m    v1.14.2&lt;br /&gt;
&lt;br /&gt;
evan@k8s-master:~$ kubectl get pod --all-namespaces&lt;br /&gt;
NAMESPACE     NAME                          READY   STATUS              RESTARTS   AGE&lt;br /&gt;
kube-system   coredns-fb8b8dccf-nprqq       0/1     Terminating         16         5h11m&lt;br /&gt;
kube-system   coredns-fb8b8dccf-qn85f       0/1     Pending             0          5m4s&lt;br /&gt;
kube-system   coredns-fb8b8dccf-sgtw4       0/1     Terminating         16         5h11m&lt;br /&gt;
kube-system   coredns-fb8b8dccf-wsnkg       0/1     Pending             0          5m5s&lt;br /&gt;
kube-system   etcd-k8s                      1/1     Running             0          5h11m&lt;br /&gt;
kube-system   kube-apiserver-k8s            1/1     Running             0          5h11m&lt;br /&gt;
kube-system   kube-controller-manager-k8s   1/1     Running             0          5h11m&lt;br /&gt;
kube-system   kube-flannel-ds-amd64-8vvn6   0/1     Init:0/1            0          107m&lt;br /&gt;
kube-system   kube-flannel-ds-amd64-q92vz   1/1     Running             0          112m&lt;br /&gt;
kube-system   kube-proxy-85vkt              0/1     ContainerCreating   0          107m&lt;br /&gt;
kube-system   kube-proxy-fr7lv              1/1     Running             0          5h11m&lt;br /&gt;
kube-system   kube-scheduler-k8s            1/1     Running             0          5h11m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
evan@k8s-master:~$ kubectl describe pod  kube-proxy-85vkt  --namespace=kube-system&lt;br /&gt;
Name:               kube-proxy-85vkt&lt;br /&gt;
Namespace:          kube-system&lt;br /&gt;
Priority:           2000001000&lt;br /&gt;
PriorityClassName:  system-node-critical&lt;br /&gt;
Node:               u16/192.168.88.66&lt;br /&gt;
****&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
  Type     Reason                  Age                   From               Message&lt;br /&gt;
  ----     ------                  ----                  ----               -------&lt;br /&gt;
  Normal   Scheduled               109m                  default-scheduler  Successfully assigned kube-system/kube-proxy-85vkt to u16&lt;br /&gt;
  Normal   Pulling                 108m                  kubelet, u16       Pulling image &amp;quot;k8s.gcr.io/kube-proxy:v1.14.2&amp;quot;&lt;br /&gt;
  Normal   Pulled                  107m                  kubelet, u16       Successfully pulled image &amp;quot;k8s.gcr.io/kube-proxy:v1.14.2&amp;quot;&lt;br /&gt;
  Normal   Created                 107m                  kubelet, u16       Created container kube-proxy&lt;br /&gt;
  Normal   Started                 107m                  kubelet, u16       Started container kube-proxy&lt;br /&gt;
  Warning  FailedCreatePodSandBox  52m (x119 over 107m)  kubelet, u16       Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image &amp;quot;k8s.gcr.io/pause:3.1&amp;quot;: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)&lt;br /&gt;
&lt;br /&gt;
放了一个晚上 早上还是坏的 突然打开已是好的了&lt;br /&gt;
&lt;br /&gt;
evan@ubuntu18:~$ kubectl get pod --all-namespaces&lt;br /&gt;
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE&lt;br /&gt;
kube-system   coredns-fb8b8dccf-2rbwc            1/1     Running   3          18h&lt;br /&gt;
kube-system   coredns-fb8b8dccf-67zc2            1/1     Running   3          18h&lt;br /&gt;
kube-system   etcd-ubuntu18                      1/1     Running   10         18h&lt;br /&gt;
kube-system   kube-apiserver-ubuntu18            1/1     Running   4          18h&lt;br /&gt;
kube-system   kube-controller-manager-ubuntu18   1/1     Running   5          18h&lt;br /&gt;
kube-system   kube-flannel-ds-amd64-b6bn8        1/1     Running   45         16h&lt;br /&gt;
kube-system   kube-flannel-ds-amd64-v9wxm        1/1     Running   46         16h&lt;br /&gt;
kube-system   kube-flannel-ds-amd64-zn4xd        1/1     Running   3          16h&lt;br /&gt;
kube-system   kube-proxy-d7pmb                   1/1     Running   4          18h&lt;br /&gt;
kube-system   kube-proxy-gcddr                   1/1     Running   0          16h&lt;br /&gt;
kube-system   kube-proxy-lv8cb                   1/1     Running   0          16h&lt;br /&gt;
kube-system   kube-scheduler-ubuntu18            1/1     Running   5          18h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
master 也当作node  这里的master hostname 为	ubuntu18OB&lt;br /&gt;
evan@ubuntu18:~$ kubectl  taint node ubuntu18 node-role.kubernetes.io/master-&lt;br /&gt;
node/ubuntu18 untainted&lt;br /&gt;
&lt;br /&gt;
#master only&lt;br /&gt;
kubectl  taint node ubuntu18 node-role.kubernetes.io/master=&amp;quot;&amp;quot;:NoSchedule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=master 也当作node =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [root@master tomcat]# hostname&lt;br /&gt;
master&lt;br /&gt;
[root@master tomcat]# kubectl taint node master node-role.kubernetes.io/master-&lt;br /&gt;
node/master untainted &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=下面的是不是可以不要翻墙了呢=&lt;br /&gt;
&lt;br /&gt;
=chpater4  k8s architecture=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#唯一不是容器形式运行的k8s 组件&lt;br /&gt;
evan@k8s-master:~$ sudo systemctl status kubelet.service&lt;br /&gt;
● kubelet.service - kubelet: The Kubernetes Node Agent&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)&lt;br /&gt;
  Drop-In: /etc/systemd/system/kubelet.service.d&lt;br /&gt;
           └─10-kubeadm.conf&lt;br /&gt;
   Active: active (running) since Mon 2019-05-27 07:26:18 UTC; 21min ago&lt;br /&gt;
     Docs: https://kubernetes.io/docs/home/&lt;br /&gt;
 Main PID: 817 (kubelet)&lt;br /&gt;
    Tasks: 19 (limit: 3499)&lt;br /&gt;
   CGroup: /system.slice/kubelet.service&lt;br /&gt;
           └─817 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
在master节点上发起个创建应用请求 &lt;br /&gt;
这里我们创建个名为httpd-app的应用，镜像为httpd，有两个副本pod&lt;br /&gt;
evan@k8s-master:~$ kubectl run httpd-app --image=httpd --replicas=2&lt;br /&gt;
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.&lt;br /&gt;
deployment.apps/httpd-app created&lt;br /&gt;
&lt;br /&gt;
evan@k8s-master:~$ kubectl get deployment&lt;br /&gt;
NAME        READY   UP-TO-DATE   AVAILABLE   AGE&lt;br /&gt;
httpd-app   0/2     2            0           103s&lt;br /&gt;
&lt;br /&gt;
evan@k8s-master:~$ kubectl get pods -o wide&lt;br /&gt;
NAME                         READY   STATUS              RESTARTS   AGE     IP       NODE        NOMINATED NODE   READINESS GATES&lt;br /&gt;
httpd-app-6df58645c6-bvg9w   0/1     ContainerCreating   0          2m10s   &amp;lt;none&amp;gt;   k8s-node1   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
httpd-app-6df58645c6-n9xdj   0/1     ContainerCreating   0          2m10s   &amp;lt;none&amp;gt;   k8s-node2   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
evan@k8s-master:~$ kubectl get pods -o wide&lt;br /&gt;
NAME                         READY   STATUS              RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES&lt;br /&gt;
httpd-app-6df58645c6-bvg9w   0/1     ContainerCreating   0          3m58s   &amp;lt;none&amp;gt;       k8s-node1   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
httpd-app-6df58645c6-n9xdj   1/1     Running             0          3m58s   10.224.1.2   k8s-node2   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
#OK了&lt;br /&gt;
evan@k8s-master:~$ kubectl get pods -o wide&lt;br /&gt;
NAME                         READY   STATUS    RESTARTS   AGE    IP           NODE        NOMINATED NODE   READINESS GATES&lt;br /&gt;
httpd-app-6df58645c6-bvg9w   1/1     Running   0          6m8s   10.224.2.3   k8s-node1   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
httpd-app-6df58645c6-n9xdj   1/1     Running   0          6m8s   10.224.1.2   k8s-node2   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=下面 关闭ss docker 代理 polipo =&lt;br /&gt;
&lt;br /&gt;
=chapter 5 run apps=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
evan@k8s-master:~$ kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2&lt;br /&gt;
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.&lt;br /&gt;
deployment.apps/nginx-deployment created&lt;br /&gt;
&lt;br /&gt;
上面的命令将部署包含两个副本的 Deployment nginx-deployment，容器的 image 为 nginx:1.7.9。&lt;br /&gt;
&lt;br /&gt;
等待一段时间&lt;br /&gt;
kubectl get deployment nginx-deployment&lt;br /&gt;
NAME               READY   UP-TO-DATE   AVAILABLE   AGE&lt;br /&gt;
nginx-deployment   2/2     2            2           36m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
接下来我们用 kubectl describe deployment 了解更详细的信息&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=等待=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo  sslocal -c /root/shadowsocks.json -d start&lt;br /&gt;
 sslocal -c shadowsocks.json -d start&lt;br /&gt;
sslocal -c shadowsocks.json -d start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=进阶=&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/shida_csdn/article/details/83176735 K8S 源码探秘 之 kubeadm init 执行流程分析]&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/m0_37556444/article/details/86494791 kubeadm--init]&lt;br /&gt;
&lt;br /&gt;
[https://www.jianshu.com/p/c01ba5bd1359?utm_campaign=maleskine&amp;amp;utm_content=note&amp;amp;utm_medium=seo_notes&amp;amp;utm_source=recommendation 安装k8s Master高可用集群]&lt;br /&gt;
&lt;br /&gt;
=What is new=&lt;br /&gt;
在Kubernetes 1.11中，CoreDNS已经实现了基于DNS的服务发现的GA，可作为kube-dns插件的替代品。这意味着CoreDNS将作为各种安装工具未来发布版本中的一个选项来提供。&lt;br /&gt;
事实上，kubeadm团队选择将其作为Kubernetes 1.11的默认选项。&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/k8scaptain/article/details/81033095 CoreDNS正式GA | kube-dns与CoreDNS有何差异？]&lt;br /&gt;
&lt;br /&gt;
[https://juejin.im/post/5b46100de51d4519105d37e3 k8s集群配置使用coredns代替kube-dns]&lt;br /&gt;
&lt;br /&gt;
=trouble=&lt;br /&gt;
&lt;br /&gt;
==Kubenetes服务不启动问题 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
重启系统后，发现kubelet服务没有起来，首先检查：&lt;br /&gt;
&lt;br /&gt;
 1.vim  /etc/fstab&lt;br /&gt;
#注释掉里面的swap一行。&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 文件加入KUBELET_CGROUP_ARGS和KUBELET_EXTRA_ARGS参数，&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.注意在启动参数中也要加入，如下：&lt;br /&gt;
[Service]&lt;br /&gt;
&lt;br /&gt;
Environment=&amp;quot;KUBELET_CGROUP_ARGS=--cgroup-driver=systemd&amp;quot;&lt;br /&gt;
Environment=&amp;quot;KUBELET_EXTRA_ARGS=--fail-swap-on=false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_CGROUP_ARGS $KUBELET_EXTRA_ARGS&lt;br /&gt;
&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl restart kubelet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== trouble2 重启一下机器就坏== &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
为什么重启一下机器就坏了呢&lt;br /&gt;
&lt;br /&gt;
systemctl  status  kubelet&lt;br /&gt;
● kubelet.service - kubelet: The Kubernetes Node Agent&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)&lt;br /&gt;
  Drop-In: /etc/systemd/system/kubelet.service.d&lt;br /&gt;
           └─10-kubeadm.conf&lt;br /&gt;
   Active: activating (auto-restart) (Result: exit-code) since Fri 2019-05-24 20:27:22 CST; 1s ago&lt;br /&gt;
     Docs: https://kubernetes.io/docs/home/&lt;br /&gt;
  Process: 1889 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (cod&lt;br /&gt;
 Main PID: 1889 (code=exited, status=255)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
kubelet.service: Main process exited, code=exited, status=255&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
journalctl -xefu kubelet&lt;br /&gt;
&lt;br /&gt;
原来是kubelet 的cgroup dirver 与 docker的不一样。docker默认使用cgroupfs,keubelet 默认使用systemd。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
简单地说就是在kubeadm init 之前kubelet会不断重启。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[kubelet-check] Initial timeout of 40s passed.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, an error has occurred:&lt;br /&gt;
	timed out waiting for the condition&lt;br /&gt;
&lt;br /&gt;
This error is likely caused by:&lt;br /&gt;
	- The kubelet is not running&lt;br /&gt;
	- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)&lt;br /&gt;
&lt;br /&gt;
If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:&lt;br /&gt;
	- &amp;#039;systemctl status kubelet&amp;#039;&lt;br /&gt;
	- &amp;#039;journalctl -xeu kubelet&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
在集群初始化遇到问题，可以使用下面的命令进行清理后重新再初始化：&lt;br /&gt;
&lt;br /&gt;
kubeadm reset&lt;br /&gt;
ifconfig cni0 down&lt;br /&gt;
ip link delete cni0&lt;br /&gt;
ifconfig flannel.1 down&lt;br /&gt;
ip link delete flannel.1&lt;br /&gt;
rm -rf /var/lib/cni/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://segmentfault.com/q/1010000015988481 K8S 初始化问题，有哪位遇到过，求解！timed out waiting for the condition]&lt;br /&gt;
&lt;br /&gt;
== trouble3 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
evan@k8s-master:~$ docker pull gcr.io/kubernetes-helm/tiller:v2.14.0&lt;br /&gt;
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/create?fromImage=gcr.io%2Fkubernetes-helm%2Ftiller&amp;amp;tag=v2.14.0: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    sudo usermod -a -G docker $USER #普通用户添加天docker 组&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[https://www.cnblogs.com/informatics/p/8276172.html Docker pull Get Permission Denied]&lt;br /&gt;
&lt;br /&gt;
==trouble 3 ==&lt;br /&gt;
 docker  223.6.6.6 有时有问题 建议用8.8.4.4&lt;br /&gt;
&lt;br /&gt;
=see also=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.jianshu.com/p/21a39ee86311?utm_campaign=maleskine&amp;amp;utm_content=note&amp;amp;utm_medium=seo_notes&amp;amp;utm_source=recommendation ubuntu 离线搭建Kubenetes1.9.2 集群]&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/RainingNight/p/using-kubeadm-to-create-a-cluster-1-12.html 使用Kubeadm搭建Kubernetes(1.12.2)集群]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.debian.cn/archives/3076 Debian 9 使用kubeadm创建 k8s 集群（上）]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.debian.cn/archives/3078 Debian 9 使用kubeadm创建 k8s 集群（下）]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxtechi.com/install-configure-kubernetes-ubuntu-18-04-ubuntu-18-10/ Install and Configure Kubernetes (k8s) 1.13 on Ubuntu 18.04 LTS / Ubuntu 18.10]&lt;br /&gt;
&lt;br /&gt;
[https://www.kubernetes.org.cn/4387.html Ubuntu 18.04 离线安装Kubernetes v1.11.1]&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/Leo_wl/p/8511902.html 安装部署 Kubernetes 集群]&lt;br /&gt;
&lt;br /&gt;
[[category:k8s]] [[category:容器]] [[category: container]]&lt;/div&gt;</summary>
		<author><name>Evan</name></author>
	</entry>
</feed>