ubuntu 搭建k8s
前言
简单搭建的方法
step1、准备两个虚拟机,并进行相应的设置
1.1、设置主机名
ubuntu 18.04不能直接修改/etc/hostname中主机名称,重启后又恢复到安装时设置的主机名称.正确的修改步骤如下:
1.首先修改/etc/cloud/cloud.cfg
1 2
sudo vim /etc/cloud/cloud.cfg #找到preserve_hostname: false修改为preserve_hostname: true
2.修改主机名
1 2
#修改主机名(临时) #hostname k8s-master
1 2 3
#修改主机名(永久) #然后改为需要的主机名后存盘退出 sudo vim /etc/hostname
1 2 3
#映射主机名 sudo vim /etc/hosts #192.168.1.xxx 主机名
1
sudo reboot
重启后新的主机名就生效了,但是要注意不能将还原preserve_hostname: false,否则下次重新后主机名又被覆盖了.
1.2 关闭swap内存
这个
swap
其实可以类比成 windows 上的虚拟内存,它可以让服务器在内存吃满的情况下可以保持低效运行,而不是直接卡死。但是 k8s 的较新版本都要求关闭swap
。所以咱们直接动手,修改/etc/fstab
文件:sudo vim /etc/fstab
你应该可以看到如下内容,把第二条用
#
注释掉就好了,注意第一条别注释了,不然重启之后系统有可能会报file system read-only
错误。
1 2
UUID=e10891b2-0cd9-4f02-8557-05b481f770c9 / ext4 defaults 0 0 #/swap.img none swap sw 0 0
重启并查看设置是否成功:
1 2 3 4
# 重启 reboot #查看 free -h
total used free shared buff/cache available Mem: 3.8G 274M 1.9G 1.4M 1.7G 3.3G Swap: 0B 0B 0B
说明关闭swap成功
1.3、配置免密登录
root用户开启远程登录
sudo vim /etc/ssh/sshd_config # 找到 PermitRootLogin prohibit-password # 改成 PermitRootLogin yes
生成公钥
如下命令生成公钥,默认会在
~/.ssh/
下生成id_rsa
和id_rsa.pub
。先检查一下机器是否已有公钥,如果没有再执行:
1
ssh-keygen -t rsa
-t 指定算法 -f 指定生成秘钥路径 -N 指定密码
拷贝公钥
1 2 3
cd ~/.ssh scp id_rsa.pub root@k8s-worker:/root/.ssh/authorized_keys #此命令在k8s-master机器执行,目的将公钥发送至k8s-worker机器 scp id_rsa.pub root@k8s-master:/root/.ssh/authorized_keys #此命令在k8s-worker机器执行,目的将公钥发送至k8s-master机器
验证
ssh k8s-worker #在k8s-master机器上,看是否免密登陆k8s-worker ssh k8s-master #在k8s-worker机器上,看是否免密登陆k8s-master
如果发现设置免密登陆,还需要输入密码,那么检查一下
/root
.ssh
authorized_keys
目录和文件的权限。chmod 600 authorized_keys chmod 700 .ssh
step2、容器初始化
1.1、docker安装
|
|
1.2、k8s安装
|
|
1.3、获取当前版本kubeadm 启动需要的镜像
使用如下命令:
kubeadm config images list
结果如下:
k8s.gcr.io/kube-apiserver:v1.18.0
k8s.gcr.io/kube-controller-manager:v1.18.0
k8s.gcr.io/kube-scheduler:v1.18.0
k8s.gcr.io/kube-proxy:v1.18.0
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
需要访问Google你懂的
可从阿里云的镜像替换为谷歌的镜像
|
|
1.4 初始化集群
|
|
结果
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.229.128:6443 --token tgb5h2.ufrhcna7nbw5g3h7 \
--discovery-token-ca-cert-hash sha256:aedef087c3a9f6505eb83d1edcd9492426ffb290a9092f9466baef1411d22446
1.5 执行相关命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
1.6 worker节点加入
kubeadm join 192.168.229.128:6443 --token tgb5h2.ufrhcna7nbw5g3h7 \
--discovery-token-ca-cert-hash sha256:aedef087c3a9f6505eb83d1edcd9492426ffb290a9092f9466baef1411d22446
1.7 后续工作(可选)
- Kubernetes 将Pod调度到Master节点
出于安全考虑,默认配置下Kubernetes不会将Pod调度到Master节点。如果希望将k8s-master也当作Node使用,可以执行如下命令:
kubectl taint node k8s-master node-role.kubernetes.io/master-
其中k8s-master是主机节点hostname如果要恢复Master Only状态,执行如下命令:
kubectl taint node k8s-master node-role.kubernetes.io/master=:NoSchedule
- 解决代码不自动补全
kubectl completion bash >> ~/.bashrc source ~/.bashrc
- 原文作者:kmistry
- 原文链接:https://chemistryhuang.github.io/posts/ubuntu-%E6%90%AD%E5%BB%BAk8s/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。